WordPress for Android

Overview

WordPress for Android

CircleCI

If you're just looking to install WordPress for Android, you can find it on Google Play. If you're a developer wanting to contribute, read on.

Build Instructions

  1. Make sure you've installed Android Studio.
  2. Install npm using Node Version Manager(nvm), as described in step one from the Block Editor Quickstart guide
  3. git clone --recurse-submodules [email protected]:wordpress-mobile/WordPress-Android.git in the folder of your preference. Or if you already have the project cloned, initialize and update the submodules:
    git submodule init
    git submodule update
    
  4. cd WordPress-Android to enter the working directory.
  5. cp gradle.properties-example gradle.properties to set up the sample app credentials file.
  6. git submodule update --init --recursive to pull the submodules (optionally use --depth=1 --recommend-shallow flags to skip pulling full submodules' history).
  7. In Android Studio, open the project from the local repository. This will auto-generate local.properties with the SDK location.
  8. Recommended: The CI uses JDK11 to build the app and run the tests. Some tests won't pass on the JDK embedded in Android Studio (JDK8). You might want to set JAVA_HOME and JDK location in Android Studio to JDK11.
  9. Go to Tools → AVD Manager and create an emulated device.
  10. Run.

Notes:

  • To use WordPress.com features (login to WordPress.com, access Reader and Stats, etc) you need a WordPress.com OAuth2 ID and secret. Please read the OAuth2 Authentication section.
  • While loading/building the app in Android Studio ignore the prompt to update the gradle plugin version as that will probably introduce build errors. On the other hand, feel free to update if you are planning to work on ensuring the compatibility of the newer version.

OAuth2 Authentication

In order to use WordPress.com functions you will need a client ID and a client secret key. These details will be used to authenticate your application and verify that the API calls being made are valid. You can create an application or view details for your existing applications with our WordPress.com applications manager.

When creating your application, you should select "Native client" for the application type. The applications manager currently requires a "redirect URL", but this isn't used for mobile apps. Just use "https://localhost".

Once you've created your application in the applications manager, you'll need to edit the ./gradle.properties file and change the wp.oauth.app_id and wp.oauth.app_secret fields. Then you can compile and run the app on a device or an emulator and try to login with a WordPress.com account. Note that authenticating to WordPress.com via Google is not supported in development builds of the app, only in the official release.

Note that credentials created with our WordPress.com applications manager allow login only and not signup. New accounts must be created using the official app or on the web. Login is restricted to the WordPress.com account with which the credentials were created. In other words, if the credentials were created with [email protected], you will only be able to login with [email protected]. Using another account like [email protected] will cause the Client cannot use "password" grant_type error.

For security reasons, some account-related actions aren't supported for development builds when using a WordPress.com account with 2-factor authentication enabled.

Read more about OAuth2 and the WordPress.com REST endpoint.

Build and Test

To build, install, and test the project from the command line:

$ ./gradlew assembleWordPressVanillaDebug                        # assemble the debug .apk
$ ./gradlew installWordPressVanillaDebug                         # install the debug .apk if you have an
                                                                 # emulator or an Android device connected
$ ./gradlew :WordPress:testWordPressVanillaDebugUnitTest         # assemble, install and run unit tests
$ ./gradlew :WordPress:connectedWordPressVanillaDebugAndroidTest # assemble, install and run Android tests

Directory structure

.
├── libs                    # dependencies used to build debug variants
├── tools                   # script collection
├── gradle.properties       # properties imported by the build script
├── WordPress
│   |-- build.gradle        # main build script
│   └── src
│       ├── androidTest     # Android test assets, resources and code
│       ├── test            # Unit tests
│       ├── main
│       │   ├── assets      # main project assets
│       │   ├── java        # main project java code
│       │   └── res         # main project resources
│       ├── debug           # debug variant
│       └── wasabi          # wasabi variant specific resources and manifest

Google Configuration

Google Sign-In is only available for WordPress.com accounts through the official app. Contributors can build and run the app without issue, but Google Sign-In will always fail. Google Sign-In requires configuration files which contain client and server information that can't be shared publicly. More documentation and guides can be found on the Google Identity Platform website.

Contributing

Read our Contributing Guide to learn about reporting issues, contributing code, and more ways to contribute.

Security

If you happen to find a security vulnerability, we would appreciate you letting us know at https://hackerone.com/automattic and allowing us to respond before disclosing the issue publicly.

Getting in Touch

If you have questions or just want to say hi, join the WordPress Slack and drop a message on the #mobile channel.

Documentation

Please read the docs for more.

Resources

License

WordPress for Android is an Open Source project covered by the GNU General Public License version 2. Note: code in the libs/ directory comes from external libraries, which might be covered by a different license compatible with the GPLv2.

Comments
  • Bump git from 1.5.0 to 1.11.0 in /libs/mocks

    Bump git from 1.5.0 to 1.11.0 in /libs/mocks

    Bumps git from 1.5.0 to 1.11.0.

    Release notes

    Sourced from git's releases.

    Release v1.11.0

    Full Changelog

    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)

    Release v1.10.2

    Full Changelog

    • 57f941c Release v1.10.2
    • c987a74 Add create-release, setup, and console dev scripts (#560)
    • 12e3d03 Store tempfile objects to prevent deletion during tests (#555)

    Release v1.10.1

    Full Changelog

    • c7b12af Release v1.10.1
    • ea28118 Properly escape double quotes in shell commands on Windows (#552)
    • db060fc Properly unescape diff paths (#504)
    • ea47044 Add Ruby 3.0 to CI build (#547)
    • cb01d2b Create a Docker image to run the changelog (#546)

    v.1.10.0

    Full Changelog

    • 8acec7d Release v1.10.0 (#545)
    • 8feb4ff Refactor directory initialization (#544)
    • 3884314 Add -ff option to git clean (#529)
    • 984ff7f #533 Add --depth options for fetch call (#534)
    • 6cba37e Add support for git init --initial-branch=main argument (#539)
    • ff98c42 Add support for the git merge --no-commit argument (#538)
    • 1023f85 Require pathname module (#536)

    v1.9.1

    Full Changelog

    • 58100b0 Release v1.9.1 (#527)
    • 45aeac9 Fix the gpg_sign commit option (#525)

    v1.9.0

    Full Changelog

    • 07a1167 Release v1.9.0 (#524)
    • 8fe479b Fix worktree test when git dir includes symlinks (#522)
    • 0cef8ac feat: add --gpg-sign option on commits (#518)
    • 765df7c Adds file option to config_set to allow adding to specific git-config files (#458)

    ... (truncated)

    Changelog

    Sourced from git's changelog.

    v1.11.0

    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.11.0

    v1.10.2

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.2

    1.10.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.1

    1.10.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.0

    1.9.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.1

    1.9.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.0

    1.8.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.1

    1.8.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.0

    1.7.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.7.0

    1.6.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.6.0

    1.6.0.pre1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.6.0.pre1

    Commits
    • 546bc03 Release v1.11.0
    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)
    • c987a74 Add create-release, setup, and console dev scripts (#560)
    • 12e3d03 Store tempfile objects to prevent deletion during tests (#555)
    • 735b083 Release v1.10.1 (#553)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    bot: dependencies update ruby 
    opened by dependabot[bot] 103
  • Media Library: Allow uploading any file

    Media Library: Allow uploading any file

    Currently we only support uploading image & video files in the app. A user is asking to upload mp3 files for example (#144231-h). We should probably support every file type we currently support in wp-admin.

    Summary with a list of remaining work can be found pOhUr-47V-p2 + comments.

    [Type] Enhancement [Pri] Medium Media 
    opened by oguzkocer 64
  • First version of Calypso Stats

    First version of Calypso Stats

    The UI still need to be refined, but major features are all there. We want to start testing new Stats for real asap, and meanwhile refine stats UI with smaller PRs.

    Keeping track of opening issues here:

    • [x] There's no selection highlight on any of the tappable views, which is even more important on Lollipop where ripples are used. The simplest way to provide this is to use android:background="?android:selectableItemBackground" on any tappable view (this will automatically provide the ripple on Lollipop and a selection highlight on earlier version).
    • [x] Try to get rid of the setEntryTextViewClickListener() hack. See comment below
    • [x] Make sure the correct date/datetime for the blog. Seems there is a offset of 1hr.
    • [x] I recommend selecting the "Stats" folder in Android Studio then selecting Analyze > Inspect Code > Current Directory
    • [x] The selection highlight for list items seems off. It should highlight the entire row - including padding - but instead it highlights just the text. selection
    Stats 
    opened by daniloercoli 45
  • Revert local changes

    Revert local changes

    Mobile request originally reported by @rachelmcr

    WPAndroid 6.8 includes this change:
    
    >    Changed the post list behavior on tap: open the editor instead of the preview.
    
    This behavior feels right to me, but now I can’t figure out how to revert local changes on a post. In the past, here’s how it worked:
    
        Open a published post.
        Make edits to the post.
        Tap the back arrow to exit the editor. (Edits are saved as local changes.)
        Tap on the post to open the preview.
        Tap on “Revert” at the bottom of the preview to revert local changes.
    
    Now, I can’t figure out how to revert those local changes. I don’t see a prompt anywhere, and even if I open the post in the editor and undo the change I made locally the post still shows as having local changes. I can’t find where to revert them.
    
    **Update**
    
    After starting this post, but before publishing it, I realized that I could choose “Preview” on the post list and revert the local changes from that preview (since the preview was where I had that option before). However, it doesn’t feel at all intuitive to go to the preview to revert local changes on a post.
    
    Could we include a toast message or other prompt to save or revert local changes when the user opens the post in the editor? That’s where I was looking for the revert option, and it seems more intuitive to include that as part of the editor instead of the post preview.
    

    Follow ups by: @catehstn

    the best thing to do is to track this as some design work surrounding Aztec and posting and then close this.

    @0nko

    [...] a Discard button could be added to the activity menu, which is shared by all editors.

    [Type] Enhancement Mobile Request 
    opened by aerych 38
  • Crash report 7.2: IllegalArgumentException: reportSizeConfigurations

    Crash report 7.2: IllegalArgumentException: reportSizeConfigurations

    Fatal Exception: java.lang.IllegalArgumentException: reportSizeConfigurations: ActivityRecord not found for: Token{e1fb44f ActivityRecord{8954eaed0 u0 org.wordpress.android/.ui.main.WPMainActivity t13 f}}
           at android.os.Parcel.readException(Parcel.java:1697)
           at android.os.Parcel.readException(Parcel.java:1646)
           at android.app.ActivityManagerProxy.reportSizeConfigurations(ActivityManagerNative.java:8325)
           at android.app.ActivityThread.reportSizeConfigurations(ActivityThread.java:3069)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3012)
           at android.app.ActivityThread.-wrap14(ActivityThread.java)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:154)
           at android.app.ActivityThread.main(ActivityThread.java:6688)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
    
    
    [Pri] High Notifications [Type] Crash 
    opened by mzorz 37
  • Implement Offline actions - posting/scheduling/deleting while offline

    Implement Offline actions - posting/scheduling/deleting while offline

    When you create a post and you hit “publish now” a toast “Device is offline, changes saved locally” is shown

    Decision

    Offline Actions

    Android

    • [x] Improve labels according to the design https://github.com/wordpress-mobile/WordPress-Android/issues/10207
    • [x] Add support for the Cancel action https://github.com/wordpress-mobile/WordPress-Android/issues/10206
    • [ ] Add support for trashing/restoring posts in offline https://github.com/wordpress-mobile/WordPress-Android/issues/10205
    • [x] Automatically upload all local changes not just local drafts https://github.com/wordpress-mobile/WordPress-Android/issues/10174
    [Type] Bug [Pri] Medium Offline Support 
    opened by diegoreymendez 34
  • My Profile

    My Profile

    I wanted to open this PR to get some early feedback. @tonyr59h and I were discussing that his "Site Settings" implementation might have some components we can use in "My Profile" as well. I am also not completely sure I have the best approach to a couple things.

    The first question I had is about the layout. When we were working on the v1 of Calypsoification of the app with @nbradbury we opted not to use a list view for the Me fragment and I've taken a similar approach. I've used styles extensively here, so the code feels clear to me and there is not much need for a lot of switch statements. Having said that, it looks like "Site Settings" is implemented with list view, so I wanted to check in if I had the best approach for this.

    My second question is about the usage of dialogs. I have looked into the WPAlertDialogFragment and it doesn't have a builder with an input in it. So for now, I have added the dialog inside the MyProfileActivity. Should I be looking to move that implementation to WPAlertDialogFragment instead? Also, note that the current dialog only works for "first name" and I thought I'd pass a tag to showInputDialog method and use a switch statement to make it work for all labels. I actually wanted to make it work with some kind of callback mechanism but couldn't really find a way to do that. Would that be possible? If not, I don't think the method would be generic enough to add inside of WPAlertDialogFragment.

    For reference, here is the complete design for my profile page: https://cloudup.com/cGvJQYVBE0B And here are some screenshots from the actual implementation: https://cloudup.com/ciJn7zQjKfx

    Anyone can review the PR, I am just ping Maxime to add a name here. Thanks! Needs review: @maxme

    Calypsofication /Me 
    opened by oguzkocer 34
  • Drop jetifier

    Drop jetifier

    Merge Instructions:

    1. ~Review and approve (don't merge) - https://github.com/wordpress-mobile/gutenberg-mobile/pull/4361~
    2. ~Review this PR~
    3. ~Merge Aztec https://github.com/wordpress-mobile/AztecEditor-Android/pull/946/files~
    4. ~Merge Stories https://github.com/Automattic/stories-android/pull/717~
    5. ~Merge GB PR - https://github.com/wordpress-mobile/gutenberg-mobile/pull/4361~
    6. ~Merge GB PR which updates Aztec Version - it doesn't exist yet~
    7. ~Update GB hash/version in this repo~
    8. ~Review and Merge upgrade of test dependencies - https://github.com/wordpress-mobile/WordPress-Android/pull/16170 (technically not a blocker)~
    9. ~Merge the branch in .mobile-secrets into trunk~
    10. ~Update hash and branch in .configure~ (9f811ea608958fb7acbe781672b4c4c91318c5d4)
    11. ~Remove "Not ready for merge" label~
    12. ~Merge this PR~
    13. Optional: Ping the team that they can change android.enableJetifier=true to android.enableJetifier=false in their gradle.properties or run ./gradlew configureApply.

    This PR migrates all libraries to versions which are migrated to AndroidX so we can disable jetifier on our builds. Jetifier was always intended to be used only temporarily and is planned to be removed from future versions of AGP.

    List of changes

    • Bumps Stetho version to 1.6.0 - the only change is that the version is migrated to AndroidX - https://github.com/facebook/stetho/releases
    • Bumps ExoPlayer from 2.9.3 to 2.12.3 -> this was the most challenging task as ExoPlayer is used in both MediaPreivewFragment and Gutenberg-Mobile => we had to bump the version in both Gutenberg and MediaPreviewFragment. (This work isn't done yet, the GB part is still WIP)
    • Updates WordPress utils version to a version which is migrated to AndroidX -> I bumped the version in all the modules to make the version consistent
    • Adds our S3 repo to Analytics and Networking modules so the new version of WordPress utils is reachable
    • Disables jetifier - updated gradle.properties and .configure
    • "Manually" (using cmd tool) Jetified the Tenor library since it hasn't been updated since 2018 and I don't think it'll get updated any time soon
    • Updated Aztec version with version that uses the updated version of WordPress utils

    To test: Make sure to disable Jetifier in your local gradle.properties => Smoke test the app - anything you can think of.

    1. Open Media Library
    2. Open a detail of a video
    3. Tap on the preview
    4. Make sure the preview is displayed correctly and you can play the video

    1. Create a new post
    2. Add image block
    3. Select "Choose from Tenor"
    4. Type "Cat"
    5. Add a gif

    1. Create a new post
    2. Add Cover block
    3. Add Video
    4. Choose a video file
    5. Make sure the video preview works

    Regression Notes

    1. Potential unintended areas of impact
    • Video previews (media library)
    • Video blocks in Gutenberg
    • Adding gifs from Tenor
    1. What I did to test those areas of impact (or what existing automated tests I relied on) The above "to test" section

    2. What automated tests I added (or what prevented me from doing so)

    None - this is a technical improvement which doesn't change the UX

    PR submission checklist:

    • [x] I have completed the Regression Notes.
    • [x] I have considered adding accessibility improvements for my changes.
    • [x] I have considered if this change warrants user-facing release notes and have added them to RELEASE-NOTES.txt if necessary.
    Tech Debt 
    opened by malinajirka 33
  • Crash when drawing the editor on devices running Android 8

    Crash when drawing the editor on devices running Android 8

    It appears we're getting a crash specific to Android devices with Android 8.x, prevalently Huawei devices.

    The relevant bits of the stack trace:

    Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=79; index=-19
           at android.text.DynamicLayout.getBlockIndex(DynamicLayout.java:646)
           at android.widget.Editor.drawHardwareAccelerated(Editor.java:1744)
           at android.widget.Editor.onDraw(Editor.java:1713)
           at android.widget.TextView.onDraw(TextView.java:7034)
           at android.view.View.draw(View.java:19314)
           at android.view.View.updateDisplayListIfDirty(View.java:18250)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.draw(View.java:19317)
           at android.widget.ScrollView.draw(ScrollView.java:1777)
           at android.view.View.updateDisplayListIfDirty(View.java:18250)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.draw(View.java:19317)
           at android.view.View.updateDisplayListIfDirty(View.java:18250)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.draw(View.java:19317)
           at android.support.v4.view.ViewPager.draw(ViewPager.java:2420)
           at android.view.View.updateDisplayListIfDirty(View.java:18250)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.updateDisplayListIfDirty(View.java:18241)
           at android.view.View.draw(View.java:19042)
           at android.view.ViewGroup.drawChild(ViewGroup.java:4271)
           at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4054)
           at android.view.View.draw(View.java:19317)
           at com.android.internal.policy.DecorView.draw(DecorView.java:915)
           at android.view.View.updateDisplayListIfDirty(View.java:18250)
           at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:684)
           at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:690)
           at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:804)
           at android.view.ViewRootImpl.draw(ViewRootImpl.java:3199)
           at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2997)
           at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2526)
           at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1515)
           at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7266)
           at android.view.Choreographer$CallbackRecord.run(Choreographer.java:981)
           at android.view.Choreographer.doCallbacks(Choreographer.java:790)
           at android.view.Choreographer.doFrame(Choreographer.java:721)
           at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:967)
           at android.os.Handler.handleCallback(Handler.java:808)
           at android.os.Handler.dispatchMessage(Handler.java:101)
           at android.os.Looper.loop(Looper.java:166)
           at android.app.ActivityThread.main(ActivityThread.java:7529)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
    

    It seems likely that this is related to #8827 – both are platform-specific Android 8 issues.

    reference: 5a76a4fa8cb3c2fa634286c6-fabric reference: 5af4233111e9fa0aa513dfa0-fabric marked as high priority as it's happening ~35 times/day and affecting ~800 users

    [Pri] Low [Type] Crash Aztec 
    opened by jkmassel 33
  • Add a Dark Theme

    Add a Dark Theme

    A user requested that the app have a dark theme instead of the current holo lite theme: ​http://android.forums.wordpress.org/topic/switch-themes-feature?replies=1

    [Type] Enhancement [Pri] Low Core 
    opened by roundhill 33
  • Crash: InflateException: Binary XML file line #26: Error inflating class org.wordpress.android.l...

    Crash: InflateException: Binary XML file line #26: Error inflating class org.wordpress.android.l...

    Sentry Issue: https://sentry.io/share/issue/136cee38cb79491db456071ee0c686a0/

    NotFoundException: Unable to find resource ID #0x7f0800bb
        at org.wordpress.android.util.widgets.WPTextInputLayout.<init>(WPTextInputLayout.java:20)
        at org.wordpress.android.login.widgets.WPLoginInputRow.init(WPLoginInputRow.java:67)
        at org.wordpress.android.login.widgets.WPLoginInputRow.<init>(WPLoginInputRow.java:58)
        at org.wordpress.android.login.LoginBaseFormFragment.createMainView(LoginBaseFormFragment.java:100)
        at org.wordpress.android.login.LoginBaseFormFragment.onCreateView(LoginBaseFormFragment.java:106)
    ...
    (60 additional frame(s) were not displayed)
    
    NotFoundException: Drawable (missing name) with resource ID #0x7f0800bb
    NotFoundException: File res/drawable-v21/design_password_eye.xml from drawable resource ID #0x7f0800bd
        at org.wordpress.android.util.widgets.WPTextInputLayout.<init>(WPTextInputLayout.java:20)
        at org.wordpress.android.login.widgets.WPLoginInputRow.init(WPLoginInputRow.java:67)
        at org.wordpress.android.login.widgets.WPLoginInputRow.<init>(WPLoginInputRow.java:58)
        at org.wordpress.android.login.LoginBaseFormFragment.createMainView(LoginBaseFormFragment.java:100)
        at org.wordpress.android.login.LoginBaseFormFragment.onCreateView(LoginBaseFormFragment.java:106)
    ...
    (49 additional frame(s) were not displayed)
    
    NotFoundException: Drawable org.wordpress.android:drawable/design_password_eye with resource ID #0x7f0800bd
    InvocationTargetException: None
        at org.wordpress.android.login.widgets.WPLoginInputRow.init(WPLoginInputRow.java:67)
        at org.wordpress.android.login.widgets.WPLoginInputRow.<init>(WPLoginInputRow.java:58)
        at org.wordpress.android.login.LoginBaseFormFragment.createMainView(LoginBaseFormFragment.java:100)
        at org.wordpress.android.login.LoginBaseFormFragment.onCreateView(LoginBaseFormFragment.java:106)
    ...
    (37 additional frame(s) were not displayed)
    
    InflateException: Binary XML file line #21: Error inflating class org.wordpress.android.util.widgets.WPTextInputLayout
    InflateException: Binary XML file line #21: Binary XML file line #21: Error inflating class org.wordpress.android.util.widgets.WPTextInputLayout
    InvocationTargetException: None
        at org.wordpress.android.login.LoginBaseFormFragment.createMainView(LoginBaseFormFragment.java:100)
        at org.wordpress.android.login.LoginBaseFormFragment.onCreateView(LoginBaseFormFragment.java:106)
    ...
    (24 additional frame(s) were not displayed)
    
    InflateException: Binary XML file line #26: Error inflating class org.wordpress.android.login.widgets.WPLoginInputRow
    InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class org.wordpress.android.login.widgets.WPLoginInputRow
    
    Binary XML file line #26: Binary XML file line #26: Error inflating class org.wordpress.android.login.widgets.WPLoginInputRow
    
    [Type] Crash Login 
    opened by sentry-io[bot] 32
  • Plugins: autoudpate toggle doesn't work in for self hosted sites

    Plugins: autoudpate toggle doesn't work in for self hosted sites

    Expected behavior

    That the toggle works as expected or that it is not there.

    Actual behavior

    Currently you see a autoupdate toggle for plugins on self hosted sites.

    Steps to reproduce the behavior

    Login to a self hosted site. Navigate to Plugins > any plugin. Notice that you see a toggle a plugin to be autoupdate able.

    Tested on Simulator, WPAndroid 21.3
    [Type] Bug [Pri] Low 
    opened by enejb 3
  • Plugins: Not able to delete + deactivate Jetpack on self hosted sites.

    Plugins: Not able to delete + deactivate Jetpack on self hosted sites.

    Expected behavior

    Currently if you are running WordPress app you should be able to delete + deactivate the Jetpack plugin.

    Actual behavior

    On your self hosted site you currently can't delete and deactivate the Jetpack plugin. Steps to reproduce the behavior

    Login to a self hosted site as an Admin. Navigate to Plugins > Jetpack Notice that you can't deactive or delete the Jetpack plugin.

    Tested on Simulator WPAndroid 21.3
    [Type] Bug [Pri] Low 
    opened by enejb 1
  • Webpage Opens on Rotate on Overlay Screen

    Webpage Opens on Rotate on Overlay Screen

    Expected behavior

    I expect the Overlay screen to rotate as the device rotates and UI to change appropriately.

    Actual behavior

    When rotating the device the webpage opens for the Learn more at jetpack.com.

    Steps to reproduce the behavior

    1. I was testing this PR when I saw it, though this PR is merged in by now.
    2. Enable Phase 2 by going to App Settings > App Debug Settings > select the check box for jp_removal_two.
    Tested on [device], Android [version], WPAndroid [version]

    Samsung A51, Android 12, WPAndroid Trunk (as of 1/04/2023).

    [Type] Bug NUX Android 12 
    opened by JB184351 0
  • Update media permissions for Android 13

    Update media permissions for Android 13

    We must use READ_MEDIA_IMAGES, READ_MEDIA_VIDEO and READ_MEDIA_AUDIO instead of READ_EXTERNAL_STORAGE.

    https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions

    [Type] Task Android 13 
    opened by irfano 0
  • Runtime permission for notifications

    Runtime permission for notifications

    Android 13 users encounter a permission dialog at the first launch of the app. We should control when we show the permission dialog for better UX.

    https://developer.android.com/about/versions/13/changes/notification-permission Internal P2 post: pbArwn-5EG-p2

    [Type] Task Android 13 
    opened by irfano 0
  • Add Jetpack branding to Themes screen starting from Phase Two

    Add Jetpack branding to Themes screen starting from Phase Two

    Fixes Partially #17334

    This PR adds the Jetpack powered branding to the Themes screen starting from Phase Two of Features removal.

    To test:

    Jetpack Branding on the Themes screen should be visible starting from Phase Two of Features removal (jp_removal_two), while it should be hidden when all Jetpack removal flags are disabled or when Phase One is started.

    There are 2 effective scenarios:

    • Not Branded
      • In this scenario the Jetpack powered branding should not be visible
      • This phase is active when:
        • All Jetpack removal flags are disabled
        • The jp_removal_one flag is enabled
    • Branded
      • In this scenario the Jetpack powered branding should be visible on Themes screen
      • This phase is active when any of the following features removal flags are enabled:
        • jp_removal_two
        • jp_removal_three
        • jp_removal_four

    The change the features removal flags:

    • Go to MeApp SettingsDebug settings and toggle the jp_removal_NNN flags (e.g. jp_removal_two).

    Test using the following steps in each scenario:

    Testing Steps

    1. Open the WordPress app and login
    2. Toggle one of the feature removals flags based on the above notes
    3. Go to My SiteMenu tab
    4. From menu, under 'Look and Feel' tap Themes
    5. If in 'Not Branded' scenario
      • Expect to see no Jetpack powered branding
    6. If in 'Branded' scenario:
      1. Expect the Jetpack powered banner to be visible at the bottom of the screen
      2. Tap the banner
      3. Expect the WordPress is better with Jetpack bottom sheet to be displayed
      4. tap the Try the new Jetpack app button
        1. If Jetpack app is not installed it should open the Play Store to install it
        2. If Jetpack app is installed, it should open
    7. Go back to the WordPress app
    8. Scroll down on the Themes screen
    9. Expect the Jetpack powered banner to hide
    10. Scroll back to top
    11. Expect the Jetpack powered banner to show

    Screenshots

    | Not Branded | Branded | | - | - | | | |

    Regression Notes

    1. Potential unintended areas of impact Themes screen (WordPress & Jetpack app).

    2. What I did to test those areas of impact (or what existing automated tests I relied on) Manual testing.

    3. What automated tests I added (or what prevented me from doing so) Added tests for the new logic to JetpackFeatureRemovalBrandingUtilTest.

    PR submission checklist:

    • [x] I have completed the Regression Notes.
    • [x] I have considered adding accessibility improvements for my changes.
    • [x] I have considered if this change warrants user-facing release notes and have added them to RELEASE-NOTES.txt if necessary.
    [Type] Task Jetpack Focus 
    opened by ovitrif 2
Releases(21.3)
Library for easy work with Facebook, Twitter, LinkedIn and Google on Android

THIS PROJECT IS NO LONGER MAINTAINED, FEEL FREE TO FORK AND FIX IT FOR YOUR NEEDS There is also an Android Library that is being maintained, CloudRail

Anton Krasov 1k Dec 18, 2022
Easy social network authorization for Android. Supports Facebook, Twitter, Instagram, Google+, Vkontakte. Made by Stfalcon

SocialAuthHelper A library that helps to implement social network authorization (Facebook, Twitter, Instagram, GooglePlus, Vkontakte). Who we are Need

Stfalcon LLC 97 Nov 24, 2022
Youtube-dl for android

youtube-dl-android Android library wrapper for youtube-dl executable. Based on yausername's youtubedl-android but with ability to download binary file

Vikas 97 Dec 30, 2022
Twidere for Android

Twidere for Android Material Design ready and feature rich Twitter/Mastodon/Fanfou app for Android 4.1+. Enjoy Fediverse now! Twidere-Android is maint

Twidere Project 2.7k Dec 27, 2022
A Reddit client for Android

This is a Reddit client on Android written in Java. It does not have any ads and it features clean UI and smooth browsing experience.

null 2.6k Jan 9, 2023
An unofficial open source Reddit client for Android.

RedReader An unofficial, open source Android client for Reddit. Features Free and open-source Software - no ads/tracking Lightweight and fast Swipe po

null 1.4k Jan 7, 2023
Slide is an open sourced, ad free Reddit browser for Android

Slide Slide is an open source, ad free Reddit browser for Android. It is based around the Java Reddit API Wrapper. Slide is available on the Google Pl

Carlos Crane 1.7k Dec 27, 2022
Open-source alternative Instagram client on Android.

Instagram client; previously known as InstaGrabber.

Austin Huang 1.1k Jul 23, 2021
Kickstarter for Android. Bring new ideas to life, anywhere.

Welcome to Kickstarter's open source Android app! Come on in, take your shoes off, stay a while—explore how Kickstarter's native squad has built and c

Kickstarter 5.7k Jan 2, 2023
A light Sina Weibo client for Android

BlackLight 新浪微博客户端 请注意,当前BlackLight的开发已经被冻结,直到2016年高考后重启。 The development progress has been FROZEN till June 2016. 详细介绍以及Changelog请见Play商店。 https://pl

Paper Airplane Dev Team/纸飞机开发团队 884 Nov 22, 2022
Cnblogs Client for Android - Material Design

Cotable - Yet Another Cnblogs Client for Android Description Cotable = Code + Stable (The Paradise of Coder) The Android client of Cnblogs that named

Steve Lemuel 38 Feb 12, 2022
GitHub client for Android based on the abandoned official app

ForkHub ForkHub started off as a fork of the official Android app from GitHub, and has since seen lots of improvements. You can see a comprehensive li

Jon Ander Peñalba 2.8k Dec 28, 2022
GitHub Android application

Gitskarios Beta Testing Community Forum / Discussion Join the beta here Download it from Google Play! What is Gitskarios? Gitskarios is an Android App

Gitskarios 530 Dec 19, 2022
The Google I/O Android App

Google I/O Android App 2021 Update Due to global events, Google I/O 2020 was canceled and Google I/O 2021 is an online-only event, so the companion ap

Google 21.7k Jan 7, 2023
A handy Dribbble client for Android.

Notice Gunnner has been deprecated since Dribbble API v1 has been retired on March 26, 2018. Gunnner Gunnner1 is a handy Dribbble client for Android.

Egor Neliuba 60 Feb 12, 2022
📲 Android Application to track any user activity on Github built using the Github Developers API. Used Retrofit to fetch data and MVVM Architecture.

Github Visualizer ?? Android Application to track any user activity on Github built using the Github Developers Api. A sample application to demonstra

Dheeraj Kotwani 104 Dec 28, 2022
An Android client for Pump.io

Impeller - An Android client for Pump.io What is it A client for Pump.io, intended to provide a rich, platform-integrated experience. Runs on Android

Erin 46 Nov 1, 2022
A libre lightweight streaming front-end for Android.

NewPipe A libre lightweight streaming frontend for Android. Screenshots • Description • Features • Installation and updates • Contribution • Donate •

Team NewPipe 22.4k Jan 2, 2023
Github client for Android

OctoDroid This application provides access to GitHub and lets you stay connected with your network Download Main features Repository List repositories

Azwan Adli 1.5k Dec 28, 2022