-
-
Notifications
You must be signed in to change notification settings - Fork 773
/
MainFragment.java
146 lines (130 loc) · 5.92 KB
/
MainFragment.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package ai.fedml.edgedemo.ui.main;
import ai.fedml.edge.FedEdgeManager;
import ai.fedml.edge.OnTrainProgressListener;
import ai.fedml.edge.service.communicator.message.MessageDefine;
import ai.fedml.edge.utils.LogHelper;
import ai.fedml.edgedemo.App;
import ai.fedml.edgedemo.GlideApp;
import ai.fedml.edgedemo.widget.CompletedProgressView;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import ai.fedml.edgedemo.R;
public class MainFragment extends Fragment {
private MainViewModel mViewModel;
private TextView mStatusTextView;
private TextView mAccLossTextView;
private CompletedProgressView mProgressView;
private TextView mHyperTextView;
private TextView mNameTextView;
private TextView mEmailTextView;
private TextView mGroupTextView;
private ImageView mAvatarImageView;
private TextView mDeviceAccountInfoTextView;
private TextView mUnInitButton;
private TextView mInitButton;
public static MainFragment newInstance() {
return new MainFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mViewModel = new ViewModelProvider(this).get(MainViewModel.class);
View view = inflater.inflate(R.layout.main_fragment, container, false);
initView(view);
loadData();
return view;
}
private void initView(final @NonNull View view) {
mStatusTextView = view.findViewById(R.id.tv_status);
mAccLossTextView = view.findViewById(R.id.tv_acc_loss);
mProgressView = view.findViewById(R.id.progress_view);
mHyperTextView = view.findViewById(R.id.tv_hyper_parameter);
mDeviceAccountInfoTextView = view.findViewById(R.id.tv_account_info);
mNameTextView = view.findViewById(R.id.tv_name);
mEmailTextView = view.findViewById(R.id.tv_email);
mGroupTextView = view.findViewById(R.id.tv_group);
mAvatarImageView = view.findViewById(R.id.iv_avatar);
// mUnInitButton = view.findViewById(R.id.btn_uninit);
// mInitButton = view.findViewById(R.id.btn_init);
}
private void loadData() {
// mInitButton.setOnClickListener((view)->{
// FedEdgeManager.getFedEdgeApi().init(getContext());
// });
// mUnInitButton.setOnClickListener((view) -> {
// FedEdgeManager.getFedEdgeApi().unInit();
// });
getUserInfo();
mDeviceAccountInfoTextView.setText(getString(R.string.account_information, FedEdgeManager.getFedEdgeApi().getBoundEdgeId()));
mProgressView.setProgress(0);
FedEdgeManager.getFedEdgeApi().setEpochLossListener(new OnTrainProgressListener() {
private int mRound = 0;
private int mEpoch = 0;
private float mLoss = 0f;
private float mAccuracy = 0f;
@Override
public void onEpochLoss(int round, int epoch, float loss) {
mRound = round;
mEpoch = epoch;
mLoss = loss;
App.runOnUiThread(() ->
mAccLossTextView.setText(getString(R.string.acc_loss_txt, mRound, mEpoch, mAccuracy, mLoss)));
}
@Override
public void onEpochAccuracy(int round, int epoch, float accuracy) {
mRound = round;
mEpoch = epoch;
mAccuracy = accuracy;
App.runOnUiThread(() ->
mAccLossTextView.setText(getString(R.string.acc_loss_txt, mRound, mEpoch, mAccuracy, mLoss)));
}
@Override
public void onProgressChanged(int round, float progress) {
App.runOnUiThread(() ->
mProgressView.setProgress(Math.round(progress)));
}
});
FedEdgeManager.getFedEdgeApi().setTrainingStatusListener((status) ->
App.runOnUiThread(() -> {
Log.d("setTrainingStatusListener", "FedMLDebug status = " + status);
if (status == MessageDefine.KEY_CLIENT_STATUS_INITIALIZING ||
status == MessageDefine.KEY_CLIENT_STATUS_KILLED ||
status == MessageDefine.KEY_CLIENT_STATUS_IDLE ||
status == MessageDefine.KEY_CLIENT_STATUS_FAILED) {
LogHelper.i("FedEdgeManager", "FedMLDebug. status = " + status);
mHyperTextView.setText(FedEdgeManager.getFedEdgeApi().getHyperParameters());
mProgressView.setProgress(0);
mAccLossTextView.setText(getString(R.string.acc_loss_txt, 0, 0, 0.0, 0.0));
}
mStatusTextView.setText(MessageDefine.CLIENT_STATUS_MAP.get(status));
}));
}
private void getUserInfo() {
FedEdgeManager.getFedEdgeApi().getUserInfo(userInfo -> {
if (userInfo != null) {
App.runOnUiThread(() -> {
mNameTextView.setText(String.format("%s %s", userInfo.getLastname(), userInfo.getFirstName()));
mEmailTextView.setText(userInfo.getEmail());
mGroupTextView.setText(userInfo.getCompany());
GlideApp.with(MainFragment.this)
.load(userInfo.getAvatar())
.circleCrop()
.error(R.mipmap.ic_shijiali)
.placeholder(R.mipmap.ic_shijiali)
.into(mAvatarImageView);
});
}
});
}
}