Skip to content

Commit 0e83d44

Browse files
committed
Added the changelog dialog for more dialog goodness
Fixed README.md
1 parent 4a3256b commit 0e83d44

File tree

7 files changed

+232
-7
lines changed

7 files changed

+232
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ You can show the changelog as easily as calling:
114114
Winds.checkChangelogActivity(context, R.xml.other_changelog);
115115
```
116116

117-
* **Screenshot**
117+
* **Screenshot**
118118

119119
![Winds Screenshot](art/winds_screen.png)
120120

example/src/main/java/com/ftinc/kit/example/ui/main/MainActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.ftinc.kit.example.R;
2626
import com.ftinc.kit.mvp.BaseActivity;
2727
import com.ftinc.kit.ui.attributr.Attributr;
28+
import com.ftinc.kit.ui.winds.Winds;
2829
import com.nispok.snackbar.Snackbar;
2930
import com.nispok.snackbar.enums.SnackbarType;
3031

@@ -65,7 +66,12 @@ protected void onCreate(Bundle savedInstanceState) {
6566
ButterKnife.inject(this);
6667
setSupportActionBar(mToolbar);
6768

69+
// Parse the extras here
6870
mPresenter.parseExtras(savedInstanceState);
71+
72+
// Check the changelog
73+
Winds.checkChangelogDialog(this);
74+
6975
}
7076

7177
@Override

example/src/main/java/com/ftinc/kit/example/ui/main/MainPresenterImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void onActionClicked(int id) {
5050
Attributr.openLicenses(mView.getActivity(), R.xml.example_licenses);
5151
break;
5252
case R.id.action_winds:
53-
Winds.gust(mView.getActivity());
53+
Winds.openChangelogActivity(mView.getActivity());
5454
break;
5555
}
5656
}

library/src/main/java/com/ftinc/kit/ui/winds/Winds.java

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.ftinc.kit.ui.winds;
1818

19+
import android.app.Activity;
1920
import android.content.Context;
2021
import android.content.Intent;
2122
import android.content.SharedPreferences;
@@ -32,6 +33,7 @@
3233
import com.ftinc.kit.ui.winds.model.Version;
3334
import com.ftinc.kit.ui.winds.ui.ChangeLogActivity;
3435
import com.ftinc.kit.ui.winds.ui.ChangeLogAdapter;
36+
import com.ftinc.kit.ui.winds.ui.ChangeLogDialog;
3537
import com.ftinc.kit.widget.StickyRecyclerHeadersElevationDecoration;
3638

3739
import timber.log.Timber;
@@ -81,7 +83,7 @@ public static RecyclerView draft(Context ctx, @XmlRes int configId){
8183
* @param ctx the context to launch the activity with
8284
* @param configId the changelog xml configuration
8385
*/
84-
public static void gust(Context ctx, @XmlRes int configId){
86+
public static void openChangelogActivity(Context ctx, @XmlRes int configId){
8587
Intent intent = new Intent(ctx, ChangeLogActivity.class);
8688
intent.putExtra(ChangeLogActivity.EXTRA_CONFIG, configId);
8789
ctx.startActivity(intent);
@@ -91,8 +93,28 @@ public static void gust(Context ctx, @XmlRes int configId){
9193
* Open the changelog activity with the default configuration file {@link R.xml#changelog}
9294
* @param ctx the context to open with
9395
*/
94-
public static void gust(Context ctx){
95-
gust(ctx, R.xml.changelog);
96+
public static void openChangelogActivity(Context ctx){
97+
openChangelogActivity(ctx, R.xml.changelog);
98+
}
99+
100+
/**
101+
* Open the changelog dialog
102+
*
103+
* @param ctx the activity to launch the dialog fragment with
104+
* @param configId the changelog configuration resource id
105+
*/
106+
public static void openChangelogDialog(Activity ctx, @XmlRes int configId){
107+
ChangeLogDialog dialog = ChangeLogDialog.createInstance(configId);
108+
dialog.show(ctx.getFragmentManager(), null);
109+
}
110+
111+
/**
112+
* Open the changelog dialog
113+
*
114+
* @param ctx
115+
*/
116+
public static void openChangelogDialog(Activity ctx){
117+
openChangelogDialog(ctx, R.xml.changelog);
96118
}
97119

98120
/**
@@ -110,7 +132,7 @@ public static void checkChangelogActivity(Context ctx, @XmlRes int configId){
110132

111133
// Validate that there is a new version code
112134
if(validateVersion(ctx, changeLog)) {
113-
gust(ctx, configId);
135+
openChangelogActivity(ctx, configId);
114136
}else{
115137
Timber.i("No new changelog available.");
116138
}
@@ -131,6 +153,44 @@ public static void checkChangelogActivity(Context ctx){
131153
checkChangelogActivity(ctx, R.xml.changelog);
132154
}
133155

156+
/**
157+
* Check to see if we should show the changelog activity if there are any new changes
158+
* to the configuration file.
159+
*
160+
* @param ctx the context to launch the activity with
161+
* @param configId the changelog configuration xml resource id
162+
*/
163+
public static void checkChangelogDialog(Activity ctx, @XmlRes int configId){
164+
165+
// Parse configuration
166+
ChangeLog changeLog = Parser.parse(ctx, configId);
167+
if(changeLog != null){
168+
169+
// Validate that there is a new version code
170+
if(validateVersion(ctx, changeLog)) {
171+
openChangelogDialog(ctx, configId);
172+
}else{
173+
Timber.i("No new changelog available.");
174+
}
175+
176+
}else{
177+
throw new NullPointerException("Unable to find a 'Winds' configuration @ " + configId);
178+
}
179+
180+
}
181+
182+
/**
183+
* Check to open the changelog activity with the default configuration file
184+
* {@link R.xml#changelog}
185+
*
186+
* @param ctx the context to launch with
187+
*/
188+
public static void checkChangelogDialog(Activity ctx){
189+
checkChangelogDialog(ctx, R.xml.changelog);
190+
}
191+
192+
193+
134194
/**
135195
* Validate the last seen stored verion code against the current changelog configuration
136196
* to see if there is any updates and whether or not we should show the changelog dialog when
@@ -156,7 +216,7 @@ private static boolean validateVersion(Context ctx, ChangeLog clog){
156216

157217
// Get applications current version
158218
if(latest > lastSeen){
159-
prefs.edit().putInt(PREF_CHANGELOG_LAST_SEEN, latest).apply();
219+
if(!BuildConfig.DEBUG) prefs.edit().putInt(PREF_CHANGELOG_LAST_SEEN, latest).apply();
160220
return true;
161221
}
162222

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package com.ftinc.kit.ui.winds.ui;
2+
3+
import android.app.Dialog;
4+
import android.app.DialogFragment;
5+
import android.content.Context;
6+
import android.os.Bundle;
7+
import android.support.annotation.Nullable;
8+
import android.support.annotation.XmlRes;
9+
import android.support.v7.widget.RecyclerView;
10+
import android.view.LayoutInflater;
11+
import android.view.View;
12+
import android.view.ViewGroup;
13+
import android.view.Window;
14+
import android.widget.FrameLayout;
15+
import android.widget.TextView;
16+
17+
import com.ftinc.kit.R;
18+
import com.ftinc.kit.font.Face;
19+
import com.ftinc.kit.font.FontLoader;
20+
import com.ftinc.kit.ui.winds.Winds;
21+
22+
import butterknife.ButterKnife;
23+
24+
/**
25+
* Project: android-52Kit
26+
* Package: com.ftinc.kit.ui.winds.ui
27+
* Created by drew.heavner on 3/16/15.
28+
*/
29+
public class ChangeLogDialog extends DialogFragment implements View.OnClickListener {
30+
31+
public static ChangeLogDialog createInstance(@XmlRes int configResId){
32+
ChangeLogDialog dialog = new ChangeLogDialog();
33+
Bundle args = new Bundle();
34+
args.putInt(EXTRA_CONFIG, configResId);
35+
dialog.setArguments(args);
36+
return dialog;
37+
}
38+
39+
/***********************************************************************************************
40+
*
41+
* Variables
42+
*
43+
*/
44+
45+
public static final String EXTRA_CONFIG = "extra_config_id";
46+
public int mConfigResId;
47+
48+
private FrameLayout mContainer;
49+
private TextView mOkButton;
50+
private RecyclerView mRecycler;
51+
52+
/***********************************************************************************************
53+
*
54+
* Lifecycle Methods
55+
*
56+
*/
57+
58+
@Override
59+
public void onCreate(Bundle savedInstanceState) {
60+
super.onCreate(savedInstanceState);
61+
mConfigResId = getArguments().getInt(EXTRA_CONFIG);
62+
63+
//setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Theme_AppCompat_Light);
64+
}
65+
66+
@Nullable
67+
@Override
68+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
69+
View view = inflater.inflate(R.layout.dialog_changelog, container, false);
70+
71+
mContainer = ButterKnife.findById(view, R.id.container);
72+
mOkButton = ButterKnife.findById(view, R.id.button_ok);
73+
FontLoader.apply(mOkButton, Face.ROBOTO_MEDIUM);
74+
75+
// Generate Winds Recycler View
76+
mRecycler = Winds.draft(getActivity(), mConfigResId);
77+
mContainer.addView(mRecycler);
78+
79+
mOkButton.setOnClickListener(this);
80+
81+
return view;
82+
}
83+
84+
@Override
85+
public Dialog onCreateDialog(Bundle savedInstanceState) {
86+
Dialog dialog = super.onCreateDialog(savedInstanceState);
87+
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
88+
return dialog;
89+
}
90+
91+
/***********************************************************************************************
92+
*
93+
* Helper Methods
94+
*
95+
*/
96+
97+
@Override
98+
public void onClick(View v) {
99+
dismiss();
100+
}
101+
102+
103+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:orientation="vertical"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent">
6+
7+
<FrameLayout
8+
android:id="@+id/container"
9+
android:layout_width="match_parent"
10+
android:layout_height="wrap_content"
11+
android:layout_above="@+id/seperator"
12+
android:minWidth="300dp"/>
13+
14+
<View
15+
android:id="@+id/seperator"
16+
android:layout_width="match_parent"
17+
android:layout_height="1dp"
18+
android:background="@color/black12"
19+
android:layout_above="@+id/button_layout"/>
20+
21+
<RelativeLayout
22+
android:id="@+id/button_layout"
23+
android:layout_width="match_parent"
24+
android:layout_height="48dp"
25+
android:gravity="end|center_vertical"
26+
android:paddingRight="@dimen/activity_padding"
27+
android:paddingLeft="@dimen/activity_padding"
28+
android:layout_alignParentBottom="true"
29+
>
30+
31+
<TextView
32+
android:id="@+id/button_ok"
33+
android:layout_width="wrap_content"
34+
android:layout_height="36dp"
35+
android:gravity="center"
36+
37+
android:minWidth="@dimen/min_button_width"
38+
android:paddingLeft="@dimen/half_padding"
39+
android:paddingRight="@dimen/half_padding"
40+
android:layout_marginRight="@dimen/quarter_padding"
41+
android:layout_marginLeft="@dimen/quarter_padding"
42+
43+
android:text="@android:string/ok"
44+
android:textSize="@dimen/button"
45+
android:textColor="?attr/colorAccent"
46+
android:textAllCaps="true"
47+
android:alpha="0.87"
48+
49+
android:background="?attr/selectableItemBackground"
50+
/>
51+
52+
</RelativeLayout>
53+
54+
</RelativeLayout>

library/src/main/res/values/dimens.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
<dimen name="activity_padding">16dp</dimen>
2121
<dimen name="half_padding">8dp</dimen>
22+
<dimen name="quarter_padding">4dp</dimen>
2223

2324
<dimen name="keyline_1">24dp</dimen>
2425

@@ -39,5 +40,6 @@
3940
<dimen name="avatar_dimen">40dp</dimen>
4041
<dimen name="extended_appbar_size">128dp</dimen>
4142
<dimen name="changelog_item_padding">4dp</dimen>
43+
<dimen name="min_button_width">64dp</dimen>
4244

4345
</resources>

0 commit comments

Comments
 (0)