From 57aa460712ce300073a0dfe617f81fe99775baf6 Mon Sep 17 00:00:00 2001 From: Christine Emrich Date: Sat, 1 Apr 2017 20:21:49 +0200 Subject: [PATCH 1/2] Use AppCompat components wherever possible --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 5 +- .../app/AppCompatPreferenceActivity.java | 108 ++++++++++++++++++ .../android/periodical/AboutActivity.java | 20 ++-- .../android/periodical/CalendarCell.java | 2 + .../android/periodical/HelpActivity.java | 16 ++- .../android/periodical/ListActivity.java | 43 +++---- .../android/periodical/MainActivity.java | 5 +- .../android/periodical/OptionsActivity.java | 23 ++-- app/src/main/res/layout/listitem.xml | 1 + app/src/main/res/layout/listview.xml | 20 +--- app/src/main/res/menu/main.xml | 19 +-- 12 files changed, 187 insertions(+), 80 deletions(-) create mode 100644 app/src/main/java/com/example/android/supportv7/app/AppCompatPreferenceActivity.java diff --git a/app/build.gradle b/app/build.gradle index c76e368c..0f6e6eb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,6 +31,7 @@ android { } dependencies { - compile 'com.android.support:support-v4:25.1.0' - compile 'com.android.support:support-annotations:25.1.0' + compile 'com.android.support:appcompat-v7:25.3.0' + compile 'com.android.support:support-v4:25.3.0' + compile 'com.android.support:support-annotations:25.3.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9e9e5a94..8732447c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,8 +9,9 @@ android:label="@string/app_name" android:icon="@drawable/periodical" android:allowBackup="true" - android:fullBackupContent="true"> - + android:fullBackupContent="true" + android:theme="@style/Theme.AppCompat"> + diff --git a/app/src/main/java/com/example/android/supportv7/app/AppCompatPreferenceActivity.java b/app/src/main/java/com/example/android/supportv7/app/AppCompatPreferenceActivity.java new file mode 100644 index 00000000..19bf608d --- /dev/null +++ b/app/src/main/java/com/example/android/supportv7/app/AppCompatPreferenceActivity.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.supportv7.app; +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatDelegate; +import android.support.v7.widget.Toolbar; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +/** + * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls + * to be used with AppCompat. + * + * This technique can be used with an {@link android.app.Activity} class, not just + * {@link android.preference.PreferenceActivity}. + */ +public abstract class AppCompatPreferenceActivity extends PreferenceActivity { + private AppCompatDelegate mDelegate; + @Override + protected void onCreate(Bundle savedInstanceState) { + getDelegate().installViewFactory(); + getDelegate().onCreate(savedInstanceState); + super.onCreate(savedInstanceState); + } + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + getDelegate().onPostCreate(savedInstanceState); + } + public ActionBar getSupportActionBar() { + return getDelegate().getSupportActionBar(); + } + public void setSupportActionBar(@Nullable Toolbar toolbar) { + getDelegate().setSupportActionBar(toolbar); + } + @Override + public MenuInflater getMenuInflater() { + return getDelegate().getMenuInflater(); + } + @Override + public void setContentView(@LayoutRes int layoutResID) { + getDelegate().setContentView(layoutResID); + } + @Override + public void setContentView(View view) { + getDelegate().setContentView(view); + } + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().setContentView(view, params); + } + @Override + public void addContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().addContentView(view, params); + } + @Override + protected void onPostResume() { + super.onPostResume(); + getDelegate().onPostResume(); + } + @Override + protected void onTitleChanged(CharSequence title, int color) { + super.onTitleChanged(title, color); + getDelegate().setTitle(title); + } + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getDelegate().onConfigurationChanged(newConfig); + } + @Override + protected void onStop() { + super.onStop(); + getDelegate().onStop(); + } + @Override + protected void onDestroy() { + super.onDestroy(); + getDelegate().onDestroy(); + } + public void invalidateOptionsMenu() { + getDelegate().invalidateOptionsMenu(); + } + private AppCompatDelegate getDelegate() { + if (mDelegate == null) { + mDelegate = AppCompatDelegate.create(this, null); + } + return mDelegate; + } +} diff --git a/app/src/main/java/de/arnowelzel/android/periodical/AboutActivity.java b/app/src/main/java/de/arnowelzel/android/periodical/AboutActivity.java index d41a5073..8d22949f 100644 --- a/app/src/main/java/de/arnowelzel/android/periodical/AboutActivity.java +++ b/app/src/main/java/de/arnowelzel/android/periodical/AboutActivity.java @@ -1,5 +1,5 @@ /** - * Periodical "about" activity + * Periodical "about" activity * Copyright (C) 2012-2015 Arno Welzel * * This code is free software: you can redistribute it and/or modify @@ -19,9 +19,9 @@ package de.arnowelzel.android.periodical; import android.annotation.SuppressLint; -import android.app.ActionBar; -import android.app.Activity; import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -29,7 +29,7 @@ /** * Activity to handle the "About" command */ -public class AboutActivity extends Activity { +public class AboutActivity extends AppCompatActivity { /** * Called when the activity starts @@ -55,13 +55,11 @@ public void onPageFinished(WebView view, String url) { view.loadUrl("file:///android_asset/"+getString(R.string.asset_about)); // Activate "back button" in Action Bar if possible - if (android.os.Build.VERSION.SDK_INT >= 11) { - ActionBar actionBar = getActionBar(); - assert actionBar != null; - actionBar.setDisplayHomeAsUpEnabled(true); - } + ActionBar actionBar = getSupportActionBar(); + assert actionBar != null; + actionBar.setDisplayHomeAsUpEnabled(true); } - + /** * Handler for ICS "home" button */ @@ -76,4 +74,4 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/de/arnowelzel/android/periodical/CalendarCell.java b/app/src/main/java/de/arnowelzel/android/periodical/CalendarCell.java index 41ff6f85..24632ccb 100644 --- a/app/src/main/java/de/arnowelzel/android/periodical/CalendarCell.java +++ b/app/src/main/java/de/arnowelzel/android/periodical/CalendarCell.java @@ -18,6 +18,7 @@ package de.arnowelzel.android.periodical; +import android.annotation.SuppressLint; import android.text.format.DateUtils; import de.arnowelzel.android.periodical.PeriodicalDatabase.DayEntry; import android.content.Context; @@ -41,6 +42,7 @@ /** * Custom button class to display the calendar cells */ +@SuppressLint("AppCompatCustomView") public class CalendarCell extends Button { /** flag for "is current day" */ protected boolean isCurrent; diff --git a/app/src/main/java/de/arnowelzel/android/periodical/HelpActivity.java b/app/src/main/java/de/arnowelzel/android/periodical/HelpActivity.java index 596ec71c..d39cefc9 100644 --- a/app/src/main/java/de/arnowelzel/android/periodical/HelpActivity.java +++ b/app/src/main/java/de/arnowelzel/android/periodical/HelpActivity.java @@ -18,16 +18,16 @@ package de.arnowelzel.android.periodical; -import android.app.ActionBar; -import android.app.Activity; import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.webkit.WebView; /** * Activity to handle the "Help" command */ -public class HelpActivity extends Activity { +public class HelpActivity extends AppCompatActivity { /** * Called when the activity starts @@ -43,11 +43,9 @@ public void onCreate(Bundle savedInstanceState) { view.loadUrl("file:///android_asset/"+getString(R.string.asset_help)); // Activate "back button" in Action Bar if possible - if (android.os.Build.VERSION.SDK_INT >= 11) { - ActionBar actionBar = getActionBar(); - assert actionBar != null; - actionBar.setDisplayHomeAsUpEnabled(true); - } + ActionBar actionBar = getSupportActionBar(); + assert actionBar != null; + actionBar.setDisplayHomeAsUpEnabled(true); } /** @@ -64,4 +62,4 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/de/arnowelzel/android/periodical/ListActivity.java b/app/src/main/java/de/arnowelzel/android/periodical/ListActivity.java index f19a7479..4657ca08 100644 --- a/app/src/main/java/de/arnowelzel/android/periodical/ListActivity.java +++ b/app/src/main/java/de/arnowelzel/android/periodical/ListActivity.java @@ -1,42 +1,44 @@ /** - * Periodical list activity + * Periodical list activity * Copyright (C) 2012-2015 Arno Welzel - * + * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package de.arnowelzel.android.periodical; -import java.util.Calendar; -import java.util.Iterator; - -import android.content.Context; import android.annotation.SuppressLint; -import android.app.ActionBar; +import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.ListViewCompat; import android.view.MenuItem; import android.view.View; +import android.widget.AdapterView; import android.widget.ArrayAdapter; -import android.widget.ListView; + +import java.util.Calendar; +import java.util.Iterator; import de.arnowelzel.android.periodical.PeriodicalDatabase.DayEntry; /** * Activity to handle the "List" command */ -public class ListActivity extends android.app.ListActivity { +public class ListActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { /** * Database for calendar data */ @@ -96,18 +98,19 @@ public void onCreate(Bundle savedInstanceState) { entries[pos - 1] += "\n" + getString(R.string.event_periodfirst); } - setListAdapter(new ArrayAdapter<>(this, R.layout.listitem, - entries)); // Set custom view setContentView(R.layout.listview); + ListViewCompat listView = (ListViewCompat) findViewById(R.id.listview); + listView.setAdapter(new ArrayAdapter<>(this, R.layout.listitem, + entries)); + listView.setOnItemClickListener(this); + // Activate "back button" in Action Bar if possible - if (android.os.Build.VERSION.SDK_INT >= 11) { - ActionBar actionBar = getActionBar(); - assert actionBar != null; - actionBar.setDisplayHomeAsUpEnabled(true); - } + ActionBar actionBar = getSupportActionBar(); + assert actionBar != null; + actionBar.setDisplayHomeAsUpEnabled(true); } /** @@ -139,7 +142,7 @@ public boolean onOptionsItemSelected(MenuItem item) { /** * Handler for opening a list item which will return to the main view * - * @param l + * @param adapterView * The ListView where the click happened * * @param v @@ -152,7 +155,7 @@ public boolean onOptionsItemSelected(MenuItem item) { * The row id of the item that was clicked */ @Override - protected void onListItemClick(ListView l, View v, int position, long id) { + public void onItemClick(AdapterView adapterView, View v, int position, long id) { // Determine date of clicked item if (dbMain != null && position >= 0 && position < dbMain.dayEntries.size()) { diff --git a/app/src/main/java/de/arnowelzel/android/periodical/MainActivity.java b/app/src/main/java/de/arnowelzel/android/periodical/MainActivity.java index e3ccd5fa..5fdc8d99 100644 --- a/app/src/main/java/de/arnowelzel/android/periodical/MainActivity.java +++ b/app/src/main/java/de/arnowelzel/android/periodical/MainActivity.java @@ -31,8 +31,10 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Menu; @@ -43,7 +45,6 @@ import android.widget.TextView; import android.widget.Toast; import android.widget.ViewFlipper; -import android.support.annotation.NonNull; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -52,7 +53,7 @@ /** * The main activity of the app */ -public class MainActivity extends Activity { +public class MainActivity extends AppCompatActivity { final int calButtonIds[] = { R.id.cal01, R.id.cal02, R.id.cal03, R.id.cal04, R.id.cal05, R.id.cal06, R.id.cal07, R.id.cal08, R.id.cal09, R.id.cal10, R.id.cal11, R.id.cal12, R.id.cal13, diff --git a/app/src/main/java/de/arnowelzel/android/periodical/OptionsActivity.java b/app/src/main/java/de/arnowelzel/android/periodical/OptionsActivity.java index 4b6e0cb3..bf2892ba 100644 --- a/app/src/main/java/de/arnowelzel/android/periodical/OptionsActivity.java +++ b/app/src/main/java/de/arnowelzel/android/periodical/OptionsActivity.java @@ -1,5 +1,5 @@ /** - * Periodical options activity + * Periodical options activity * Copyright (C) 2012-2015 Arno Welzel * * This code is free software: you can redistribute it and/or modify @@ -18,18 +18,23 @@ package de.arnowelzel.android.periodical; -import android.app.ActionBar; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.*; +import android.preference.EditTextPreference; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceGroup; +import android.support.v7.app.ActionBar; import android.view.MenuItem; -import android.content.SharedPreferences; import android.widget.Toast; +import com.example.android.supportv7.app.AppCompatPreferenceActivity; + /** * Activity to handle the "Preferences" command */ -public class OptionsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { +public class OptionsActivity extends AppCompatPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { /** * Called when activity starts @@ -93,11 +98,9 @@ public boolean onPreferenceChange(Preference preference, Object newValue) { }); // Activate "back button" in Action Bar if possible - if (android.os.Build.VERSION.SDK_INT >= 11) { - ActionBar actionBar = getActionBar(); - assert actionBar != null; - actionBar.setDisplayHomeAsUpEnabled(true); - } + ActionBar actionBar = getSupportActionBar(); + assert actionBar != null; + actionBar.setDisplayHomeAsUpEnabled(true); } /** diff --git a/app/src/main/res/layout/listitem.xml b/app/src/main/res/layout/listitem.xml index f0958d60..4a4e81d1 100644 --- a/app/src/main/res/layout/listitem.xml +++ b/app/src/main/res/layout/listitem.xml @@ -1,5 +1,6 @@ - - - - - + diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index ca6bcc25..2417461e 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -1,51 +1,52 @@ - + From aaf310b1ded8fe224d50daf49397e04b667c099a Mon Sep 17 00:00:00 2001 From: Christine Emrich Date: Sat, 1 Apr 2017 21:12:49 +0200 Subject: [PATCH 2/2] Show scrollbar in ListActivity --- app/src/main/res/layout/listview.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/listview.xml b/app/src/main/res/layout/listview.xml index cb36cbd6..0d819809 100644 --- a/app/src/main/res/layout/listview.xml +++ b/app/src/main/res/layout/listview.xml @@ -4,4 +4,5 @@ android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" - android:drawSelectorOnTop="false" /> + android:drawSelectorOnTop="false" + android:scrollbars="vertical"/>