Skip to content
This repository was archived by the owner on Dec 17, 2020. It is now read-only.

Commit 6f9aea5

Browse files
committed
Merge branch 'develop'
2 parents 4b685f1 + ebc3bbf commit 6f9aea5

File tree

11 files changed

+160
-48
lines changed

11 files changed

+160
-48
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
jcenter()
66
}
77
dependencies {
8-
classpath 'com.android.tools.build:gradle:1.5.0'
8+
classpath 'com.android.tools.build:gradle:2.1.2'
99
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
1010
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
1111
// NOTE: Do not place your application dependencies here; they belong

demo/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
22

33
android {
44
compileSdkVersion 23
5-
buildToolsVersion "23.0.2"
5+
buildToolsVersion "23.0.3"
66

77
defaultConfig {
88
applicationId "org.neotech.app.retainabletasksdemo"
@@ -23,8 +23,8 @@ dependencies {
2323
compile project(':library')
2424
//compile 'org.neotech.library:android-retainable-tasks:0.1.0'
2525

26-
compile 'com.android.support:appcompat-v7:23.2.0'
27-
compile 'com.android.support:design:23.2.0'
26+
compile 'com.android.support:appcompat-v7:23.4.0'
27+
compile 'com.android.support:design:23.4.0'
2828

2929
//LeakCanary is used to detect memory leaks in debug builds.
3030
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'

demo/src/main/AndroidManifest.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@
3232

3333
<activity
3434
android:name=".activity.Main"
35-
android:label="@string/app_name"
36-
android:theme="@style/AppTheme.NoActionBar">
35+
android:label="@string/app_name">
3736
<intent-filter>
3837
<action android:name="android.intent.action.MAIN" />
3938
<category android:name="android.intent.category.LAUNCHER" />

demo/src/main/java/org/neotech/app/retainabletasksdemo/activity/Main.java

Lines changed: 73 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import android.content.Intent;
55
import android.net.Uri;
66
import android.os.Bundle;
7+
import android.os.SystemClock;
8+
import android.support.annotation.NonNull;
79
import android.support.v7.app.AppCompatActivity;
810
import android.support.v7.widget.Toolbar;
911
import android.text.Spanned;
@@ -16,33 +18,36 @@
1618
import android.widget.Button;
1719
import android.widget.ListView;
1820
import android.widget.TextView;
21+
import android.widget.ViewSwitcher;
1922

2023
import org.neotech.app.retainabletasksdemo.ExtendedHtml;
2124
import org.neotech.app.retainabletasksdemo.R;
25+
import org.neotech.library.retainabletasks.Task;
26+
import org.neotech.library.retainabletasks.providers.TaskActivityCompat;
2227

2328
import java.util.ArrayList;
29+
import java.util.List;
2430

2531
/**
2632
* Created by Rolf on 16-3-2016.
2733
*/
28-
public class Main extends AppCompatActivity {
34+
public class Main extends TaskActivityCompat implements Task.Callback {
2935

36+
private ViewSwitcher vSwitcher;
37+
private ListView list;
3038

3139
@Override
3240
protected void onCreate(Bundle savedInstanceState) {
3341
super.onCreate(savedInstanceState);
3442
setContentView(R.layout.activity_main);
35-
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
43+
// setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
3644

37-
ArrayList<Demo> demos = new ArrayList<>(1);
38-
demos.add(new Demo(this, R.string.demo_examples_title, R.string.demo_examples_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivityBasic.java", new Intent(this, DemoActivityBasic.class)));
39-
demos.add(new Demo(this, R.string.demo_serial_title, R.string.demo_serial_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivitySerial.java", new Intent(this, DemoActivitySerial.class)));
40-
demos.add(new Demo(this, R.string.demo_fragments_title, R.string.demo_fragments_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivityFragments.java", new Intent(this, DemoActivityFragments.class)));
41-
demos.add(new Demo(this, R.string.demo_no_compat_title, R.string.demo_no_compat_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivityV11.java", new Intent(this, DemoActivityV11.class)));
45+
vSwitcher = (ViewSwitcher) findViewById(R.id.switcher);
46+
list = (ListView) findViewById(android.R.id.list);
4247

43-
44-
ListView list = (ListView) findViewById(android.R.id.list);
45-
list.setAdapter(new DemoAdapter(demos));
48+
if(!getTaskManager().isRunning("list-loader")) {
49+
getTaskManager().execute(new UselessLoadingTask("list-loader", this), this);
50+
}
4651
}
4752

4853
@Override
@@ -59,6 +64,56 @@ public boolean onOptionsItemSelected(MenuItem item) {
5964
return super.onOptionsItemSelected(item);
6065
}
6166

67+
public void setListShown(boolean shown){
68+
if(vSwitcher.getCurrentView() == list && !shown){
69+
vSwitcher.showNext();
70+
} else if(vSwitcher.getCurrentView() != list && shown){
71+
vSwitcher.showNext();
72+
}
73+
}
74+
75+
@Override
76+
public Task.Callback onPreAttach(@NonNull Task<?, ?> task) {
77+
setListShown(false);
78+
return this;
79+
}
80+
81+
@Override
82+
public void onPreExecute(Task<?, ?> task) {
83+
84+
}
85+
86+
@Override
87+
public void onPostExecute(Task<?, ?> raw) {
88+
UselessLoadingTask task = (UselessLoadingTask) raw;
89+
list.setAdapter(new DemoAdapter(task.getResult()));
90+
setListShown(true);
91+
}
92+
93+
/**
94+
* Task just to demonstrate the principe of starting a task before the UI is ready.
95+
*/
96+
private static class UselessLoadingTask extends Task<Void, ArrayList<Demo>> {
97+
98+
private final Context context;
99+
100+
public UselessLoadingTask(String tag, Context context) {
101+
super(tag);
102+
this.context = context.getApplicationContext();
103+
}
104+
105+
@Override
106+
protected ArrayList<Demo> doInBackground() {
107+
SystemClock.sleep(1500);
108+
ArrayList<Demo> demos = new ArrayList<>(4);
109+
demos.add(new Demo(context, R.string.demo_examples_title, R.string.demo_examples_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivityBasic.java", new Intent(context, DemoActivityBasic.class)));
110+
demos.add(new Demo(context, R.string.demo_serial_title, R.string.demo_serial_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivitySerial.java", new Intent(context, DemoActivitySerial.class)));
111+
demos.add(new Demo(context, R.string.demo_fragments_title, R.string.demo_fragments_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivityFragments.java", new Intent(context, DemoActivityFragments.class)));
112+
demos.add(new Demo(context, R.string.demo_no_compat_title, R.string.demo_no_compat_description, "org/neotech/app/retainabletasksdemo/activity/DemoActivityV11.java", new Intent(context, DemoActivityV11.class)));
113+
return demos;
114+
}
115+
}
116+
62117
private static class DemoAdapter extends BaseAdapter implements View.OnClickListener {
63118

64119
private static class ViewHolder {
@@ -82,6 +137,14 @@ public DemoAdapter(ArrayList<Demo> demos){
82137
this.demos = demos;
83138
}
84139

140+
public DemoAdapter(){
141+
this.demos = new ArrayList<>();
142+
}
143+
144+
public List<Demo> getItems(){
145+
return demos;
146+
}
147+
85148
@Override
86149
public int getCount() {
87150
return demos.size();
Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
2+
3+
<!--
4+
<LinearLayout
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
7-
android:fitsSystemWindows="true"
8-
tools:context="org.neotech.app.retainabletasksdemo.activity.Main">
7+
android:orientation="vertical">
98
109
<include layout="@layout/toolbar_layout" />
1110
12-
<ListView
11+
-->
12+
13+
<ViewSwitcher
14+
xmlns:android="http://schemas.android.com/apk/res/android"
15+
android:id="@+id/switcher"
1316
android:layout_width="match_parent"
14-
android:layout_height="match_parent"
15-
app:layout_behavior="@string/appbar_scrolling_view_behavior"
16-
android:id="@android:id/list" />
17+
android:layout_height="match_parent">
18+
19+
<ProgressBar
20+
style="?android:attr/progressBarStyleLarge"
21+
android:layout_width="wrap_content"
22+
android:layout_height="wrap_content"
23+
android:layout_gravity="center"
24+
android:id="@android:id/progress" />
25+
26+
<ListView
27+
android:layout_width="match_parent"
28+
android:layout_height="match_parent"
29+
android:id="@android:id/list" />
1730

18-
</android.support.design.widget.CoordinatorLayout>
31+
</ViewSwitcher>
32+
<!--
33+
</LinearLayout>
34+
-->
1935

2036

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<android.support.design.widget.AppBarLayout
2+
<android.support.v7.widget.Toolbar
33
xmlns:android="http://schemas.android.com/apk/res/android"
44
xmlns:app="http://schemas.android.com/apk/res-auto"
5+
android:id="@+id/toolbar"
56
android:layout_width="match_parent"
6-
android:layout_height="wrap_content"
7-
android:theme="@style/AppTheme.AppBarOverlay">
8-
9-
<android.support.v7.widget.Toolbar
10-
android:id="@+id/toolbar"
11-
android:layout_width="match_parent"
12-
android:layout_height="?attr/actionBarSize"
13-
android:background="?attr/colorPrimary"
14-
app:popupTheme="@style/AppTheme.PopupOverlay" />
15-
16-
</android.support.design.widget.AppBarLayout>
7+
android:layout_height="?attr/actionBarSize"
8+
android:background="?attr/colorPrimary"
9+
app:popupTheme="@style/AppTheme.PopupOverlay" />
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Wed Oct 21 11:34:03 PDT 2015
1+
#Thu Apr 28 17:08:46 CEST 2016
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

library/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ ext {
1616
artifact = 'android-retainable-tasks'
1717

1818
libraryDescription = 'Android-Retainable-Tasks is an easy to use mini-library for easy asynchronous background tasking with callback support to the UI. This library is based on the Android AsyncTask implementation but with support for retaining tasks and therefore surviving configuration changes (orientation).'
19-
libraryVersion = '0.2.1'
19+
libraryVersion = '0.2.3'
2020

2121
siteUrl = 'https://github.com/NeoTech-Software/Android-Retainable-Tasks'
2222
gitUrl = 'https://github.com/NeoTech-Software/Android-Retainable-Tasks.git'
@@ -37,7 +37,7 @@ version = libraryVersion
3737

3838
android {
3939
compileSdkVersion 23
40-
buildToolsVersion "23.0.2"
40+
buildToolsVersion "23.0.3"
4141

4242
defaultConfig {
4343
minSdkVersion 8
@@ -60,8 +60,8 @@ configurations {
6060
dependencies {
6161
compile fileTree(dir: 'libs', include: ['*.jar'])
6262
testCompile 'junit:junit:4.12'
63-
compile 'com.android.support:appcompat-v7:23.2.0'
64-
javadocCompile 'com.android.support:appcompat-v7:23.2.0'
63+
compile 'com.android.support:appcompat-v7:23.4.0'
64+
javadocCompile 'com.android.support:appcompat-v7:23.4.0'
6565
}
6666

6767
apply from: 'publish-library.gradle'

library/src/main/java/org/neotech/library/retainabletasks/TaskManager.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,11 @@ public static boolean isStrictDebugModeEnabled(){
151151
@MainThread
152152
public static TaskManager getFragmentTaskManager(@NonNull Fragment fragment){
153153
final String tag = getTaskManagerTag(fragment.getTag());
154-
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getFragmentManager()), tag);
154+
if(fragment.getParentFragment() != null){
155+
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getParentFragment().getFragmentManager()), tag);
156+
} else {
157+
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getFragmentManager()), tag);
158+
}
155159
}
156160

157161
/**
@@ -163,9 +167,24 @@ public static TaskManager getFragmentTaskManager(@NonNull Fragment fragment){
163167
@MainThread
164168
public static TaskManager getFragmentTaskManager(@NonNull android.app.Fragment fragment){
165169
final String tag = getTaskManagerTag(fragment.getTag());
166-
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getFragmentManager()), tag);
170+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
171+
return getFragmentTaskManagerAPI17(fragment, tag);
172+
} else {
173+
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getFragmentManager()), tag);
174+
}
167175
}
168176

177+
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
178+
@MainThread
179+
private static TaskManager getFragmentTaskManagerAPI17(@NonNull android.app.Fragment fragment, String tag){
180+
if(fragment.getParentFragment() != null){
181+
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getParentFragment().getFragmentManager()), tag);
182+
} else {
183+
return getTaskManager(TaskRetainingFragment.getInstance(fragment.getFragmentManager()), tag);
184+
}
185+
}
186+
187+
169188
private static TaskManager getTaskManager(@NonNull TaskRetainingFragment taskRetainingFragment, @NonNull String tag){
170189
BaseTaskManager manager = (BaseTaskManager) taskRetainingFragment.findTaskManagerByTag(tag);
171190
if(manager == null){

library/src/main/java/org/neotech/library/retainabletasks/TaskManagerLifeCycleProxy.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
/**
1313
* Created by Rolf on 3-3-2016.
1414
*/
15-
public final class TaskManagerLifeCycleProxy {
15+
public final class TaskManagerLifeCycleProxy implements BaseTaskManager.UIStateProvider {
1616

1717
private BaseTaskManager fragmentTaskManager;
1818
private final TaskManagerProvider provider;
19+
private boolean uiReady = false;
1920

2021
public TaskManagerLifeCycleProxy(@NonNull TaskManagerProvider provider){
2122
if(!(provider instanceof Activity || provider instanceof Fragment || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && provider instanceof android.app.Fragment))){
@@ -32,10 +33,12 @@ public TaskManagerLifeCycleProxy(@NonNull TaskManagerProvider provider){
3233
}
3334

3435
public void onStart(){
36+
uiReady = true;
3537
((BaseTaskManager) getTaskManager()).attach(provider);
3638
}
3739

3840
public void onStop(){
41+
uiReady = false;
3942
((BaseTaskManager) getTaskManager()).detach();
4043
}
4144

@@ -56,6 +59,12 @@ public TaskManager getTaskManager(){
5659
//This should never happen as the constructor checks everything.
5760
}
5861
*/
62+
fragmentTaskManager.setUIStateProvider(this);
5963
return fragmentTaskManager;
6064
}
65+
66+
@Override
67+
public boolean isUserInterfaceReady() {
68+
return uiReady;
69+
}
6170
}

0 commit comments

Comments
 (0)