An unofficial Douban app mainly used for browsing the Groups section. (豆瓣非官方app,主要用于小组浏览。)
The development of this app is resumed to meet the requests of the friend who filed the first issue! While we will only add new features for the limited number of existing users, this project is also going to be used as my playground for fashionable libraries/coding styles such as Jetpack Compose. This brings tons of migration tasks, and also means that old libraries and new libraries are currently mixed together.
Note I am an inexperienced Android beginner and the only developer of it. Occasional crashes may happen, UI design may be incomplete and features you need may be missing.
It has been inactive for 8 months, as:
- Reinforced by the org/mods, hilarious remarks can be found everywhere
- There are few other alternatives for me to refer to
- Group theming was a mess
Very important changes starting from 0.5.0:
- Repo name:
doubean
->doubean-public
- New code will only be pushed into the private
doubean
- New code will only be pushed into the private
- New package name: com.github.bumblebee202111.doubean
The app is composed of 4 main screens
- Following
- Image view and save
- Favorite groups and tabs
- Group information
- Group tabs
- Post content
- Post comments
- Login status
- Search groups
- Group post notifications (the feature is broken now)
- Supported Android versions: 8.1 - 14
- Sometimes you need to manually clear app data when I forget to handle ROOM database schema change
- Feel free to file issues
To not get this project/myself into trouble, the update of the source code in the public repo will be suspended. However, the latest release is always available.
- Me and other developers who are learning Android, Kotlin and version control
- Me and other users who want easier access to Douban groups module
- Please use it only for personal learning purposes.
- Please don't share it on other websites/apps without permission.
It not only implements the very basic features of Douban app, but also has its own features.
Design Aspect | Choice(s) |
---|---|
Language | Kotlin |
Libraries | Jetpack and authoritative third party libraries |
Architecture | MVVM |
Design philosophy | Android Jetpack |
- Partial offline caching support
- Ad-free, lite (~4MB)
- Partially support URL deep links
- Rooted users can use login session of Douban app
- Partial support for viewing content in Douban WebView optimized for mobile reading in case of need
- Basic use of MD2/3 (may not get along well during migration)
- Recommended post notifications (maybe currently broken)
- Foundation
- AppCompat
- Android KTX
- Test (TODO)
- Architecture
- Data Binding
- Lifecycles
- Navigation
- Paging
- Room
- DataStore
- ViewModel
- WorkManager
- UI
- Animations & Transitions
- Fragment
- Layout
- Jetpack Compose
- Behavior
- Third party and miscellaneous libraries
- Ktor
- Coil
- Kotlin Coroutines
- Flow
- Kotlinx Serialization
- libsu
Incoming features, bug fixes, libraries to use and environment changes (roughly in chronological order)
-
Gradually revert naming conventions to those of Douban
-
Replace content of the recommended groups area with recommended posts
- Support pagination & add favorite tabs later
-
Gracefully remove Fragments: Stop calling Fragment methods other than onCreateView
-
No RecyclerViews
-
Gradual migrations:
- From MD2 / custom design to MD3
- From View and data binding to Jetpack Compose
- Exceptions: WebView
- From Navigation Fragment to Navigation Compose (take action when next stable version is available)
- From NavHostFragment to ComposableNavHostFragment
-
navigation-fragment-compose
-
Home - Following
- More card types
- Pagination
-
Group notifications
- Group Tab: Untighten tab notification settings from group model
-
TopAppBar and Edge-to-Edge
- Reduce MD3 TopAppBar height to 56 dp when https://developer.android.google.cn/jetpack/androidx/releases/compose-material3#1.3.0-alpha06 enters RC
-
Bring back load state visualization which was removed during various types of migrations
- Paging 3 refresh, loading status ...
-
Follow/favorite/save/subscribe
- Local favorites needs some kind of rework since following groups (official feature) is possible now although not implemented
- Save topics
- Follow groups
- Pin followed groups
- Add corresponding item action
-
Group Detail: Collapse on entrance for the followed group/tab
-
Date & time: Yesterday
-
Allow expanding group description w/ SpannableString
-
Bring back basic support for dark mode & landscape experience
-
Topics sort by
- "Last updated" -> "active"
- Add "New Top"
-
Shared element
-
Lazylist problems
- Restoring scroll position is problematic
- Topic content WebView problems
- Flinging up to topic content is not smooth https://issuetracker.google.com/issues/172029355
- Sometimes topic content fails to be loaded on some low-end or large-screened devices (not sure which sets constraint)
- LazyLayoutPinnableItem?
- ...
-
Group tab: Track read
-
Fix broken topics feed
- Find why fail
- “每次动态更新请求的帖子总数限制” -> frequency (0..1)
-
Use the new nullable "edit_time" property of network posts
-
Search
- Search group/tab posts (in-group)
- Search posts of all groups (global)
-
Better model layering
-
Distinguish
en-DB
/en-US
-
More follow/favorite/save/subscribe
- Save comments
- Subscribe topics
- Sync custom lists by maintaining a fake private note (日记) which holds the data
- Custom feeds like Reddit
-
Group Detail: Group/tab/post shortcuts
-
Hide officially-marked unfriendly content by default
-
Support blocking unfriendly content
-
NetworkManager
-
Widgets
-
[Books] Add T250
-
[Movies] Add T250
-
More features of books & movies
-
Group Detail: For post items, optimize tag display, e.g., assign color to each tag mapped from name
-
Lists: Reddit-like item expand/collapse
-
Real login (which seems impossible)
-
Group Detail: WebView for group
-
Test
- Heavy use of Material Design
- New Compose samples
- Android Sunflower
- Developer Guides
- Github Browser Sample with Android Architecture Components
- Android Architecture Blueprints v1 (todo-mvvm-live)
- Material Design
- Interactive communities: StackOverflow, Google, GitHub
, cnblogs, Medium, CSDN, IssueTracker, etc.
- Especially went through articles/posts on how to gain Douban access
- Various social apps as references for UI design
- HTTPCanary for douban access
- jadx-gui for understanding models
- Google Chrome for CSS debugging