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

Commit e316402

Browse files
committed
Separated the demo app into different activities and made an overview activity.
1 parent a6b5d5a commit e316402

20 files changed

+564
-213
lines changed

demo/src/main/AndroidManifest.xml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,31 @@
1111
android:theme="@style/AppTheme">
1212

1313
<activity
14-
android:name=".ActivityWithFragments"
15-
android:label="@string/app_name"
16-
android:theme="@style/AppTheme">
14+
android:name=".activity.DemoActivityFragments"
15+
android:label="@string/app_name">
1716
</activity>
1817

1918
<activity
20-
android:name=".ActivityV11"
21-
android:label="@string/app_name"
22-
android:theme="@style/AppTheme">
19+
android:name=".activity.DemoActivityV11"
20+
android:label="@string/app_name">
21+
</activity>
22+
23+
<activity
24+
android:name=".activity.DemoActivitySerial"
25+
android:label="@string/app_name">
2326
</activity>
2427

2528
<activity
26-
android:name=".Main"
29+
android:name=".activity.DemoActivityBasic"
30+
android:label="@string/app_name">
31+
</activity>
32+
33+
<activity
34+
android:name=".activity.Main"
2735
android:label="@string/app_name"
2836
android:theme="@style/AppTheme.NoActionBar">
2937
<intent-filter>
3038
<action android:name="android.intent.action.MAIN" />
31-
3239
<category android:name="android.intent.category.LAUNCHER" />
3340
</intent-filter>
3441
</activity>
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package org.neotech.app.retainabletasksdemo;
2+
3+
import android.support.annotation.NonNull;
4+
import android.text.Editable;
5+
import android.text.Html;
6+
import android.text.Spannable;
7+
import android.text.SpannableStringBuilder;
8+
import android.text.Spanned;
9+
import android.text.TextPaint;
10+
import android.text.style.TypefaceSpan;
11+
12+
import org.xml.sax.XMLReader;
13+
14+
/**
15+
* Created by Rolf on 17-3-2016.
16+
*/
17+
public final class ExtendedHtml {
18+
19+
private static final ExtendedTagHandler TAG_HANDLER = new ExtendedTagHandler();
20+
21+
public static Spanned fromHtml(String source){
22+
return Html.fromHtml(source, null, TAG_HANDLER);
23+
}
24+
25+
private static class CodeSpan extends TypefaceSpan {
26+
27+
private final int backgroundColor;
28+
29+
public CodeSpan(int backgroundColor){
30+
super("monospace");
31+
this.backgroundColor = backgroundColor;
32+
}
33+
34+
@Override
35+
public void updateDrawState(TextPaint tp) {
36+
super.updateDrawState(tp);
37+
tp.bgColor = backgroundColor;
38+
}
39+
40+
@Override
41+
public void updateMeasureState(TextPaint paint) {
42+
super.updateMeasureState(paint);
43+
paint.bgColor = backgroundColor;
44+
}
45+
}
46+
47+
/**
48+
* Based on: http://stackoverflow.com/questions/4044509/android-how-to-use-the-html-taghandler
49+
*/
50+
private static class ExtendedTagHandler implements Html.TagHandler {
51+
52+
private static final int COLOR = 0xFFCCCCCC;
53+
54+
@Override
55+
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
56+
if(tag.equals("pre") || tag.equals("code")){
57+
if(opening){
58+
start((SpannableStringBuilder) output, new CodeSpan(COLOR));
59+
} else {
60+
end((SpannableStringBuilder) output,CodeSpan.class, new CodeSpan(COLOR));
61+
}
62+
}
63+
}
64+
65+
private static <T> Object getLast(@NonNull Spanned text, final @NonNull Class<T> kind) {
66+
final Object[] objects = text.getSpans(0, text.length(), kind);
67+
if (objects.length == 0) {
68+
return null;
69+
} else {
70+
return objects[objects.length - 1];
71+
}
72+
}
73+
74+
private static void start(@NonNull SpannableStringBuilder text, final @NonNull Object mark) {
75+
final int len = text.length();
76+
text.setSpan(mark, len, len, Spannable.SPAN_MARK_MARK);
77+
}
78+
79+
private static <T> void end(@NonNull SpannableStringBuilder text, final @NonNull Class<T> kind, final @NonNull Object representation) {
80+
final Object lastRepresentation = getLast(text, kind);
81+
82+
final int len = text.length();
83+
final int where = text.getSpanStart(lastRepresentation);
84+
85+
text.removeSpan(lastRepresentation);
86+
87+
if (where != len) {
88+
text.setSpan(representation, where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
89+
}
90+
}
91+
}
92+
}

demo/src/main/java/org/neotech/app/retainabletasksdemo/ProgressDialog.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import android.os.Bundle;
77
import android.support.annotation.NonNull;
88
import android.support.v4.app.DialogFragment;
9-
import android.support.v4.app.Fragment;
109
import android.support.v4.app.FragmentManager;
1110
import android.support.v7.app.AlertDialog;
1211
import android.view.LayoutInflater;
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,41 @@
1-
package org.neotech.app.retainabletasksdemo;
1+
package org.neotech.app.retainabletasksdemo.activity;
22

3-
import android.content.Intent;
4-
import android.net.Uri;
53
import android.os.Bundle;
64
import android.support.annotation.NonNull;
75
import android.support.design.widget.Snackbar;
86
import android.support.v4.app.DialogFragment;
9-
import android.support.v7.widget.Toolbar;
10-
import android.text.Html;
117
import android.view.View;
128
import android.widget.Button;
13-
import android.widget.TextView;
149
import android.widget.Toast;
1510

11+
import org.neotech.app.retainabletasksdemo.OnAlertDialogClickListener;
12+
import org.neotech.app.retainabletasksdemo.ProgressDialog;
13+
import org.neotech.app.retainabletasksdemo.R;
1614
import org.neotech.app.retainabletasksdemo.tasks.CountDownTask;
1715
import org.neotech.app.retainabletasksdemo.tasks.SimpleTask;
1816
import org.neotech.app.retainabletasksdemo.tasks.TaskWithoutCallback;
1917
import org.neotech.library.retainabletasks.Task;
20-
import org.neotech.library.retainabletasks.providers.TaskActivityCompat;
2118
import org.neotech.library.retainabletasks.TaskExecutor;
19+
import org.neotech.library.retainabletasks.providers.TaskActivityCompat;
2220

23-
public class Main extends TaskActivityCompat implements View.OnClickListener, Task.AdvancedCallback, OnAlertDialogClickListener {
21+
public class DemoActivityBasic extends TaskActivityCompat implements View.OnClickListener, Task.AdvancedCallback, OnAlertDialogClickListener {
2422

2523
private static final String TASK_RETAIN_UI_STATE = "retain-ui-state";
2624
private static final String TASK_PROGRESS = "progress-dialog";
27-
private static final String TASK_SERIAL = "serial-";
28-
29-
private static final int[] serialTaskText = new int[]{R.string.task_serial_1, R.string.task_serial_2, R.string.task_serial_2};
30-
private static final Button[] serialTaskButton = new Button[3];
31-
3225

3326
private static final String DIALOG_PROGRESS = "progress-dialog";
3427

3528
private ProgressDialog progressDialog;
36-
3729
private Button retainUserInterfaceButton;
3830

3931
@Override
4032
protected void onCreate(Bundle savedInstanceState) {
4133
super.onCreate(savedInstanceState);
42-
setContentView(R.layout.activity_main);
43-
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
34+
setContentView(R.layout.activity_demo_basic);
4435

45-
findViewById(R.id.button_open_fragment_activity).setOnClickListener(this);
46-
findViewById(R.id.button_open_v11_activity).setOnClickListener(this);
47-
48-
findViewById(R.id.fab).setOnClickListener(this);
4936
findViewById(R.id.button_no_ui_task).setOnClickListener(this);
5037
findViewById(R.id.button_progress_task).setOnClickListener(this);
5138

52-
53-
((TextView) findViewById(R.id.text_serial_tasks)).setText(Html.fromHtml(getString(R.string.task_serial)));
54-
serialTaskButton[0] = (Button) findViewById(R.id.button_serial_task_1);
55-
serialTaskButton[0].setOnClickListener(this);
56-
serialTaskButton[1] = (Button) findViewById(R.id.button_serial_task_2);
57-
serialTaskButton[1].setOnClickListener(this);
58-
serialTaskButton[2] = (Button) findViewById(R.id.button_serial_task_3);
59-
serialTaskButton[2].setOnClickListener(this);
60-
61-
6239
retainUserInterfaceButton = (Button) findViewById(R.id.button_retain_ui_state_task);
6340
retainUserInterfaceButton.setOnClickListener(this);
6441
}
@@ -78,18 +55,14 @@ public Task.Callback onPreAttach(@NonNull Task<?, ?> task) {
7855
}
7956
} else if(task.getTag().equals(TASK_PROGRESS)){
8057
progressDialog = ProgressDialog.getExistingInstance(getSupportFragmentManager(), DIALOG_PROGRESS);
81-
} else if(task.getTag().startsWith(TASK_SERIAL)){
82-
onPreAttachSerialTask(task);
8358
}
8459
return this;
8560
}
8661

8762
@Override
8863
public void onClick(View v) {
8964
final int id = v.getId();
90-
if(id == R.id.fab){
91-
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/NeoTech-Software/Android-Retainable-Tasks")));
92-
} else if(id == R.id.button_progress_task) {
65+
if(id == R.id.button_progress_task) {
9366
if (getTaskManager().isRunning(TASK_PROGRESS)) {
9467
Toast.makeText(this, R.string.toast_task_already_running, Toast.LENGTH_SHORT).show();
9568
}
@@ -103,19 +76,6 @@ public void onClick(View v) {
10376
CountDownTask task = new CountDownTask(TASK_RETAIN_UI_STATE, 10);
10477
getTaskManager().execute(task, this);
10578
retainUserInterfaceButton.setEnabled(false);
106-
} else if(id == R.id.button_open_fragment_activity){
107-
startActivity(new Intent(this, ActivityWithFragments.class));
108-
} else if(id == R.id.button_open_v11_activity){
109-
startActivity(new Intent(this, ActivityV11.class));
110-
} else if(id == R.id.button_serial_task_1){
111-
getTaskManager().execute(new CountDownTask(TASK_SERIAL + 1, 10), this, TaskExecutor.SERIAL_EXECUTOR);
112-
v.setEnabled(false);
113-
} else if(id == R.id.button_serial_task_2){
114-
getTaskManager().execute(new CountDownTask(TASK_SERIAL + 2, 10), this, TaskExecutor.SERIAL_EXECUTOR);
115-
v.setEnabled(false);
116-
} else if(id == R.id.button_serial_task_3){
117-
getTaskManager().execute(new CountDownTask(TASK_SERIAL + 3, 10), this, TaskExecutor.SERIAL_EXECUTOR);
118-
v.setEnabled(false);
11979
}
12080
}
12181

@@ -134,8 +94,6 @@ public void onPostExecute(Task<?, ?> task) {
13494
} else if(task.getTag().equals(TASK_RETAIN_UI_STATE)){
13595
retainUserInterfaceButton.setEnabled(true);
13696
retainUserInterfaceButton.setText(R.string.task_retain_ui_state);
137-
} else if(task.getTag().startsWith(TASK_SERIAL)) {
138-
onPostExecuteSerialTask(task);
13997
}
14098
}
14199

@@ -153,40 +111,11 @@ public void onProgressUpdate(Task<?, ?> task, Object progress) {
153111
progressDialog.setProgress((int) progress);
154112
} else if(task.getTag().equals(TASK_RETAIN_UI_STATE)){
155113
retainUserInterfaceButton.setText("" + (int) progress);
156-
} else if(task.getTag().startsWith(TASK_SERIAL)){
157-
onProgressUpdateSerialTask(task, (Integer) progress);
158114
}
159115
}
160116

161117
@Override
162118
public void onDialogFragmentClick(DialogFragment fragment, int which) {
163119
getTaskManager().cancel(TASK_PROGRESS);
164120
}
165-
166-
167-
168-
private int getSerialTaskIndex(String tag){
169-
return Integer.parseInt(tag.substring(TASK_SERIAL.length())) - 1;
170-
}
171-
172-
private void onPreAttachSerialTask(Task<?, ?> task) {
173-
final int index = getSerialTaskIndex(task.getTag());
174-
serialTaskButton[index].setEnabled(false);
175-
final Integer progress = (Integer) task.getLastKnownProgress();
176-
if (progress != null) {
177-
serialTaskButton[index].setText("" + progress);
178-
}
179-
}
180-
181-
private void onPostExecuteSerialTask(Task<?, ?> task) {
182-
final int index = getSerialTaskIndex(task.getTag());
183-
serialTaskButton[index].setEnabled(false);
184-
serialTaskButton[index].setText(serialTaskText[index]);
185-
serialTaskButton[index].setEnabled(true);
186-
}
187-
188-
private void onProgressUpdateSerialTask(Task<?, ?> task, int progress){
189-
final int index = getSerialTaskIndex(task.getTag());
190-
serialTaskButton[index].setText("" + progress);
191-
}
192121
}

demo/src/main/java/org/neotech/app/retainabletasksdemo/ActivityWithFragments.java renamed to demo/src/main/java/org/neotech/app/retainabletasksdemo/activity/DemoActivityFragments.java

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.neotech.app.retainabletasksdemo;
1+
package org.neotech.app.retainabletasksdemo.activity;
22

33
import android.content.res.Configuration;
44
import android.os.Bundle;
@@ -14,9 +14,12 @@
1414
import android.view.MenuItem;
1515
import android.view.View;
1616

17+
import org.neotech.app.retainabletasksdemo.R;
18+
import org.neotech.app.retainabletasksdemo.TestFragment;
19+
1720
import java.util.HashMap;
1821

19-
public class ActivityWithFragments extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
22+
public class DemoActivityFragments extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
2023

2124
private static final String[] FRAGMENT_TAGS = new String[]{"Fragment 1", "Fragment 2", "Fragment 3"};
2225

@@ -26,7 +29,7 @@ public class ActivityWithFragments extends AppCompatActivity implements Navigat
2629
@Override
2730
protected void onCreate(Bundle savedInstanceState) {
2831
super.onCreate(savedInstanceState);
29-
setContentView(R.layout.activity_with_fragments);
32+
setContentView(R.layout.activity_demo_fragments);
3033

3134
adapter = new FragmentAdapter(getSupportFragmentManager(), R.id.fragment_container, 3);
3235
for (String FRAGMENT_TAG : FRAGMENT_TAGS) {
@@ -50,7 +53,7 @@ protected void onCreate(Bundle savedInstanceState) {
5053
}
5154
}
5255

53-
public void setTitle(String title){
56+
private void setTitle(String title){
5457
getSupportActionBar().setTitle(title);
5558
}
5659

@@ -115,22 +118,13 @@ public boolean onNavigationItemSelected(MenuItem item) {
115118
return true;
116119
}
117120

118-
@Override
119-
protected void onStart() {
120-
super.onStart();
121-
}
122-
123121
public static class FragmentAdapter {
124122

125123
private final HashMap<String, Class<? extends Fragment>> fragments;
126124

127125
private final FragmentManager fragmentManager;
128126
private final int containerId;
129127

130-
public FragmentAdapter(FragmentManager fragmentManager, int containerViewId){
131-
this(fragmentManager, containerViewId, 4);
132-
}
133-
134128
public FragmentAdapter(FragmentManager fragmentManager, int containerViewId, int initialSize){
135129
this.fragments = new HashMap<>(initialSize);
136130
this.fragmentManager = fragmentManager;
@@ -141,14 +135,6 @@ public void addFragment(String tag, Class<? extends Fragment> fragmentClass){
141135
fragments.put(tag, fragmentClass);
142136
}
143137

144-
public int size(){
145-
return fragments.size();
146-
}
147-
148-
public Fragment getFragment(String tag){
149-
return fragmentManager.findFragmentByTag(tag);
150-
}
151-
152138
public Fragment getCurrentFragment(){
153139
return fragmentManager.findFragmentById(containerId);
154140
}

0 commit comments

Comments
 (0)