Skip to content

Instantly share code, notes, and snippets.

@Tnnnguyen
Created February 6, 2018 19:05
Show Gist options
  • Save Tnnnguyen/265bb1e39745a2a450a8ca3fe5d99e3d to your computer and use it in GitHub Desktop.
Save Tnnnguyen/265bb1e39745a2a450a8ca3fe5d99e3d to your computer and use it in GitHub Desktop.
Fix for lock screen
Fix for lock screen
@Tnnnguyen
Copy link
Author

Tnnnguyen commented Feb 6, 2018

public class LockScreenActivity extends Activity {
    private static boolean ACTIVITY_RUNNING;
    private static Activity LOCKSCREEN_INSTANCE;
    private static LockScreenStatus LOCKSCREEN_STATUS;
    private static boolean ACTIVITY_LIFECYCLE_REGISTERED;
    private static ActivityLifecycleCallbacks ACTIVITY_LIFECYCLE_CALLBACK;
    private static Application APPLICATION;

    static {
        ACTIVITY_RUNNING = false;
        LOCKSCREEN_INSTANCE = null;
        LOCKSCREEN_STATUS = LockScreenStatus.OFF;

        ACTIVITY_LIFECYCLE_REGISTERED = false;
    }

    public static void registerActivityLifecycle(Application application) {
        if (ACTIVITY_LIFECYCLE_REGISTERED == false) {
            ACTIVITY_LIFECYCLE_REGISTERED = true;

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                // create the callback
                ACTIVITY_LIFECYCLE_CALLBACK = new ActivityLifecycleCallbacks() {
                    @Override
                    public void onActivityResumed(Activity activity) {
                        ACTIVITY_RUNNING = true;
                        // recall this method so the lock screen comes up when necessary
                        updateLockScreenStatus(LOCKSCREEN_STATUS);
                    }

                    @Override
                    public void onActivityPaused(Activity activity) {
                        ACTIVITY_RUNNING = false;
                    }

                    @Override
                    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                    }

                    @Override
                    public void onActivityStarted(Activity activity) {
                    }

                    @Override
                    public void onActivityStopped(Activity activity) {
                    }

                    @Override
                    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                    }

                    @Override
                    public void onActivityDestroyed(Activity activity) {
                    }
                };

                APPLICATION = application;

                // do the activity registration
                application.registerActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE_CALLBACK);
            } else {
                // fallback and assume we always have an activity
                ACTIVITY_RUNNING = true;
            }
        }
    }

    public static void updateLockScreenStatus(LockScreenStatus status) {
        LOCKSCREEN_STATUS = status;

        if (status.equals(LockScreenStatus.OFF)) {
            // do we have a lock screen? if so we need to remove it
            if (LOCKSCREEN_INSTANCE != null) {
                LOCKSCREEN_INSTANCE.finish();
            }
        } else {
            // do we miss a lock screen and app is in foreground somehow? if so we need to lock it
            if (LOCKSCREEN_INSTANCE == null && ACTIVITY_RUNNING == true) {
                Intent intent = new Intent(APPLICATION, LockScreenActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);

                APPLICATION.startActivity(intent);
            }
        }
    }

    public static void checkLockScreen(){

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lockscreen);

        // redo the checkup
        ///////////////////////// NEW /////////////////////////////////
        LOCKSCREEN_INSTANCE = this; // Tuan added
        updateLockScreenStatus(LOCKSCREEN_STATUS);
    }

///////////////////////// NEW /////////////////////////////////
//    @Override
//    protected void onResume() {
//        super.onResume();
//        LOCKSCREEN_INSTANCE = this;
//    }
//
//    @Override
//    protected void onPause() {
//        super.onPause();
//        LOCKSCREEN_INSTANCE = null;
//    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ///////////////////////// NEW /////////////////////////////////
        LOCKSCREEN_INSTANCE = null; // Tuan added
    }

    @Override
    public void onBackPressed() {

    }
}

```

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment