1 /* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
3 * xscreensaver, Copyright (c) 2016 Jamie Zawinski <jwz@jwz.org>
4 * and Dennis Sheil <dennis@panaceasupplies.com>
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation. No representations are made about the suitability of this
11 * software for any purpose. It is provided "as is" without express or
14 * This is the XScreenSaver "application" that just brings up the
15 * Live Wallpaper preferences.
18 package org.jwz.xscreensaver;
20 import android.app.WallpaperManager;
21 import android.content.ComponentName;
22 import android.content.Intent;
23 import android.os.Build;
24 import android.os.Bundle;
25 import android.view.View;
26 import android.provider.Settings;
27 import android.Manifest;
28 import android.support.v4.app.ActivityCompat;
29 import android.support.v4.content.ContextCompat;
30 import android.os.Build;
31 import android.content.pm.PackageManager;
33 public class Activity extends android.app.Activity
34 implements View.OnClickListener {
36 private boolean wallpaperButtonClicked, daydreamButtonClicked;
37 private final static int MY_REQ_READ_EXTERNAL_STORAGE = 271828;
40 protected void onCreate(Bundle savedInstanceState) {
41 super.onCreate(savedInstanceState);
43 setContentView(R.layout.activity_xscreensaver);
44 wallpaperButtonClicked = false;
45 daydreamButtonClicked = false;
47 findViewById(R.id.apply_wallpaper).setOnClickListener(this);
48 findViewById(R.id.apply_daydream).setOnClickListener(this);
52 public void onClick(View v) {
54 case R.id.apply_wallpaper:
55 wallpaperButtonClicked();
57 case R.id.apply_daydream:
58 daydreamButtonClicked();
63 // synchronized when dealing with wallpaper state - perhaps can
65 private synchronized void withProceed() {
66 if (daydreamButtonClicked) {
68 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
69 action = Settings.ACTION_DREAM_SETTINGS;
71 action = Settings.ACTION_DISPLAY_SETTINGS;
73 startActivity(new Intent(action));
74 } else if (wallpaperButtonClicked) {
75 startActivity(new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER));
79 private void wallpaperButtonClicked() {
80 wallpaperButtonClicked = true;
84 private void daydreamButtonClicked() {
85 daydreamButtonClicked = true;
89 void checkPermission() {
90 // RES introduced in API 16
91 String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
92 if (havePermission(permission)) {
95 noPermission(permission);
99 private void noPermission(String permission) {
101 myRequestCode = MY_REQ_READ_EXTERNAL_STORAGE;
103 if (permissionsDeniedRationale(permission)) {
104 showDeniedRationale();
106 requestPermission(permission, myRequestCode);
110 private boolean permissionsDeniedRationale(String permission) {
111 boolean rationale = ActivityCompat.shouldShowRequestPermissionRationale(this,
116 private void requestPermission(String permission, int myRequestCode) {
117 ActivityCompat.requestPermissions(this,
118 new String[]{permission},
121 // myRequestCode is an app-defined int constant.
122 // The callback method gets the result of the request.
125 // TODO: This method should be asynchronous, and not block the thread
126 private void showDeniedRationale() {
130 boolean havePermission(String permission) {
132 if (Build.VERSION.SDK_INT < 16) {
136 if (permissionGranted(permission)) {
143 private boolean permissionGranted(String permission) {
144 boolean check = ContextCompat.checkSelfPermission(this, permission) ==
145 PackageManager.PERMISSION_GRANTED;
149 public void proceedIfPermissionGranted(int[] grantResults) {
151 // If request is cancelled, the result arrays are empty.
152 if (grantResults.length > 0
153 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
155 } else if (grantResults.length > 0) {
161 public void onRequestPermissionsResult(int requestCode,
162 String permissions[], int[] grantResults) {
163 switch (requestCode) {
164 case MY_REQ_READ_EXTERNAL_STORAGE:
165 proceedIfPermissionGranted(grantResults);