Skip to content

Commit 7a9f37f

Browse files
committed
为更新弹窗增加明确进度的进度条
1 parent ce36be7 commit 7a9f37f

File tree

9 files changed

+117
-20
lines changed

9 files changed

+117
-20
lines changed

.idea/misc.xml

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/gg/busStation/function/BusDataManager.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,33 @@ public static void initData(Context context, OnDataInitListener onDataInitListen
4040

4141
onDataInitListener.start();
4242

43-
initData(context);
43+
initData(context, onDataInitListener);
4444

4545
onDataInitListener.finish(true);
4646
}
4747

48-
private static void initData(Context context) {
48+
private static void initData(Context context, OnDataInitListener listener) {
4949
DataBaseHelper dataBaseHelper = DataBaseHelper.getInstance(context);
5050

5151
CompanyManager companyManager = new CompanyManager(dataBaseHelper.getDatabase());
5252
FeatureManager featureManager = new FeatureManager(dataBaseHelper.getDatabase());
5353
FareManager fareManager = new FareManager(dataBaseHelper.getDatabase());
5454

5555
dataBaseHelper.executeTransaction(db -> {
56+
int max = 3;
5657
try {
5758
companyManager.saveCompanys();
59+
60+
listener.progress(0, max, "正在从网络获取巴士数据");
5861
List<CloudFeature> features = featureManager.fetchAllFeatures();
62+
63+
listener.progress(1, max, "正在导入巴士数据");
5964
featureManager.saveFeatures(features);
65+
66+
listener.progress(2, max, "正在从网络获取车费数据");
6067
fareManager.saveFares();
68+
69+
listener.progress(max, max, "Done!");
6170
} catch (IOException e) {
6271
throw new RuntimeException(e);
6372
}
@@ -144,6 +153,8 @@ public static List<ListItemData> routesToListItemData(List<Route> routes, Featur
144153
public interface OnDataInitListener {
145154
void start();
146155

156+
void progress(int now, int max, String tip);
157+
147158
void finish(boolean status);
148159
}
149160
}

app/src/main/java/com/gg/busStation/function/database/dao/FareDAOImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public boolean exists(int routeId, int routeSeq) {
2929
@Override
3030
public void insert(int routeId, int routeSeq, String fare) {
3131
ContentValues values = fareToConvert(routeId, routeSeq, fare);
32-
db.insert(SQLConstants.fareDBName, null, values);
32+
db.insertWithOnConflict(SQLConstants.fareDBName, null, values, SQLiteDatabase.CONFLICT_REPLACE);
3333
}
3434

3535
@Override

app/src/main/java/com/gg/busStation/function/database/dao/RouteDAO.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
public interface RouteDAO {
88
void insert(Route route);
99

10+
boolean exists(int routeId, int routeSeq);
11+
1012
List<Route> getRoutes(int routeId, int routeSeq);
1113

1214
List<Integer> getRouteSeq(int routeId);

app/src/main/java/com/gg/busStation/function/database/dao/RouteDAOImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ public void insert(Route route) {
2525
db.insert(SQLConstants.routeDBName, null, contentValues);
2626
}
2727

28+
@Override
29+
public boolean exists(int routeId, int routeSeq) {
30+
Cursor cursor = db.query(SQLConstants.routeDBName,
31+
new String[]{"routeId", "routeSeq"},
32+
"routeId = ? AND routeSeq = ?",
33+
new String[]{String.valueOf(routeId), String.valueOf(routeSeq)},
34+
null, null, null);
35+
36+
boolean exists = cursor.moveToFirst();
37+
cursor.close();
38+
return exists;
39+
}
40+
2841
@Override
2942
public List<Route> getRoutes(int routeId, int routeSeq) {
3043
Cursor cursor = db.query(SQLConstants.routeDBName, null, "routeId = ? AND routeSeq = ?",

app/src/main/java/com/gg/busStation/function/feature/FeatureManager.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
import java.util.List;
2323

2424
public class FeatureManager {
25-
private static final String dataJsonUrl = "https://static.data.gov.hk/td/routes-fares-geojson/JSON_BUS.json";
25+
private static final String busDataUrl = "https://static.data.gov.hk/td/routes-fares-geojson/JSON_BUS.json";
26+
private static final String gmbDataUrl = "https://static.data.gov.hk/td/routes-fares-geojson/JSON_GMB.json";
2627
public static final int outbound = 1;
2728
public static final int inbound = 2;
2829

@@ -68,11 +69,15 @@ public static String getBoundString(int bound) {
6869
}
6970

7071
public List<CloudFeature> fetchAllFeatures() throws IOException {
71-
InputStream data = HttpClientHelper.getDataStream(dataJsonUrl);
72-
List<CloudFeature> features = JsonToBean.parseFeaturesFromStream(data);
73-
data.close();
74-
75-
return features;
72+
InputStream busData = HttpClientHelper.getDataStream(busDataUrl);
73+
InputStream gmbData = HttpClientHelper.getDataStream(gmbDataUrl);
74+
List<CloudFeature> busFeatures = JsonToBean.parseFeaturesFromStream(busData);
75+
List<CloudFeature> gmbFeatures = JsonToBean.parseFeaturesFromStream(gmbData);
76+
busData.close();
77+
gmbData.close();
78+
79+
busFeatures.addAll(gmbFeatures);
80+
return busFeatures;
7681
}
7782

7883
public void saveFeatures(List<CloudFeature> features) {
@@ -84,7 +89,9 @@ public void saveFeatures(List<CloudFeature> features) {
8489
}
8590

8691
private void saveRouteToDB(CloudFeature feature) {
87-
routeDAO.insert(convertToRoute(feature));
92+
if (!routeDAO.exists(feature.getProperties().getRouteId(), feature.getProperties().getRouteSeq())) {
93+
routeDAO.insert(convertToRoute(feature));
94+
}
8895
}
8996

9097
private void saveFeatureToDB(CloudFeature feature) {

app/src/main/java/com/gg/busStation/ui/activity/MainActivity.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import com.gg.busStation.R;
2525
import com.gg.busStation.databinding.ActivityMainBinding;
26+
import com.gg.busStation.databinding.DialogLoadingBinding;
2627
import com.gg.busStation.function.BusDataManager;
2728
import com.gg.busStation.function.SettingsManager;
2829
import com.gg.busStation.function.internet.HttpClientHelper;
@@ -38,6 +39,7 @@
3839
public class MainActivity extends BaseActivity {
3940
private static final String releaseUrl = "https://api.github.com/repos/GaodaGG/HK-BusNow/releases/latest";
4041
private ActivityMainBinding binding;
42+
private DialogLoadingBinding dialogBinding;
4143
private AlertDialog loadingDialog;
4244

4345
// 权限申请回调
@@ -56,6 +58,17 @@ public void start() {
5658
runOnUiThread(loadingDialog::show);
5759
}
5860

61+
@Override
62+
public void progress(int now, int max, String tip){
63+
runOnUiThread(() -> {
64+
dialogBinding.updateIndicator.setMax(max);
65+
dialogBinding.updateIndicator.setMin(0);
66+
dialogBinding.updateIndicator.setProgress(now, true);
67+
dialogBinding.updateProgress.setText(now + " / " + max);
68+
dialogBinding.updateTips.setText(tip);
69+
});
70+
}
71+
5972
@Override
6073
public void finish(boolean status) {
6174
runOnUiThread(() -> {
@@ -132,9 +145,10 @@ public void handleOnBackPressed() {
132145
}
133146
});
134147

148+
dialogBinding = DialogLoadingBinding.inflate(getLayoutInflater());
135149
loadingDialog = new MaterialAlertDialogBuilder(this)
136150
.setTitle(R.string.dialog_loading)
137-
.setView(R.layout.dialog_loading)
151+
.setView(dialogBinding.getRoot())
138152
.setCancelable(false)
139153
.create();
140154
}

app/src/main/java/com/gg/busStation/ui/fragment/SettingsFragment.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import androidx.preference.PreferenceFragmentCompat;
1717

1818
import com.gg.busStation.R;
19+
import com.gg.busStation.databinding.DialogLoadingBinding;
1920
import com.gg.busStation.function.BusDataManager;
2021
import com.gg.busStation.ui.activity.AboutActivity;
2122
import com.gg.busStation.ui.activity.MainActivity;
@@ -25,6 +26,7 @@
2526

2627
public class SettingsFragment extends PreferenceFragmentCompat {
2728
private AlertDialog loadingDialog;
29+
private DialogLoadingBinding dialogBinding;
2830

2931
@Override
3032
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
@@ -169,6 +171,17 @@ public void start() {
169171
requireActivity().runOnUiThread(loadingDialog::show);
170172
}
171173

174+
@Override
175+
public void progress(int now, int max, String tip){
176+
requireActivity().runOnUiThread(() -> {
177+
dialogBinding.updateIndicator.setMax(max);
178+
dialogBinding.updateIndicator.setMin(0);
179+
dialogBinding.updateIndicator.setProgress(now, true);
180+
dialogBinding.updateProgress.setText(now + " / " + max);
181+
dialogBinding.updateTips.setText(tip);
182+
});
183+
}
184+
172185
@Override
173186
public void finish(boolean status) {
174187
requireActivity().runOnUiThread(() -> {
@@ -179,9 +192,10 @@ public void finish(boolean status) {
179192
};
180193

181194
settingsUpdateNow.setOnPreferenceClickListener(preference -> {
195+
dialogBinding = DialogLoadingBinding.inflate(getLayoutInflater());
182196
loadingDialog = new MaterialAlertDialogBuilder(requireActivity())
183197
.setTitle(R.string.dialog_loading)
184-
.setView(R.layout.dialog_loading)
198+
.setView(dialogBinding.getRoot())
185199
.setCancelable(false)
186200
.create();
187201

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,55 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:layout_width="match_parent"
5+
android:layout_height="wrap_content"
46
android:layout_marginStart="24dp"
57
android:layout_marginEnd="24dp"
68
android:paddingTop="16dp"
7-
android:paddingBottom="24dp"
8-
android:layout_width="match_parent"
9-
android:layout_height="wrap_content">
9+
android:paddingBottom="24dp">
1010

11-
<com.google.android.material.progressindicator.CircularProgressIndicator
11+
<com.google.android.material.progressindicator.LinearProgressIndicator
12+
android:id="@+id/update_indicator"
13+
android:layout_width="0dp"
14+
android:layout_height="wrap_content"
15+
android:layout_marginTop="8dp"
16+
android:layout_marginStart="8dp"
17+
android:layout_marginEnd="8dp"
18+
app:layout_constraintEnd_toStartOf="@id/update_progress"
19+
app:layout_constraintStart_toStartOf="parent"
20+
app:layout_constraintTop_toTopOf="parent" />
21+
22+
<TextView
23+
android:id="@+id/update_progress"
1224
android:layout_width="wrap_content"
1325
android:layout_height="wrap_content"
14-
android:indeterminate="true"
15-
app:layout_constraintBottom_toBottomOf="parent"
26+
android:layout_marginEnd="8dp"
27+
android:text="1 / 3"
28+
android:textSize="14sp"
29+
app:layout_constraintBottom_toBottomOf="@+id/update_indicator"
30+
app:layout_constraintEnd_toEndOf="parent"
31+
app:layout_constraintStart_toEndOf="@id/update_indicator"
32+
app:layout_constraintTop_toTopOf="@+id/update_indicator" />
33+
34+
<TextView
35+
android:id="@+id/update_tips"
36+
android:layout_width="wrap_content"
37+
android:layout_height="wrap_content"
38+
android:layout_marginTop="12dp"
39+
android:text="占位文本"
40+
android:textSize="16sp"
1641
app:layout_constraintEnd_toEndOf="parent"
1742
app:layout_constraintStart_toStartOf="parent"
18-
app:layout_constraintTop_toTopOf="parent" />
43+
app:layout_constraintTop_toBottomOf="@+id/update_indicator" />
44+
45+
46+
<!-- <com.google.android.material.progressindicator.CircularProgressIndicator-->
47+
<!-- android:layout_width="wrap_content"-->
48+
<!-- android:layout_height="wrap_content"-->
49+
<!-- android:indeterminate="true"-->
50+
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
51+
<!-- app:layout_constraintEnd_toEndOf="parent"-->
52+
<!-- app:layout_constraintStart_toStartOf="parent"-->
53+
<!-- app:layout_constraintTop_toTopOf="parent" />-->
1954

2055
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)