├── .DS_Store ├── MainActivity.java └── README.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aokj/SmartCalc/c96471772325dbf5c7bc2e351d913129874474b7/.DS_Store -------------------------------------------------------------------------------- /MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.dreamfish.com.autocalc; 2 | 3 | import android.content.Intent; 4 | import android.content.res.Resources; 5 | import android.graphics.drawable.Drawable; 6 | import android.os.Bundle; 7 | import android.view.Menu; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.FrameLayout; 11 | import android.widget.PopupMenu; 12 | import android.widget.TextView; 13 | 14 | import androidx.annotation.NonNull; 15 | import androidx.appcompat.app.AppCompatActivity; 16 | import androidx.fragment.app.Fragment; 17 | import androidx.viewpager.widget.ViewPager; 18 | 19 | import com.aokj.sdk.advip.wxpay.ClearAdActivity; 20 | import com.aokj.sdk.csj.CSJAdManagerHolder; 21 | import com.aokj.sdk.gdt.GDTAdManagerHolder; 22 | import com.aokj.sdk.lc.AdConfig; 23 | import com.aokj.sdk.lc.AdConfigInterface; 24 | import com.dreamfish.com.autocalc.dialog.CommonDialogs; 25 | import com.dreamfish.com.autocalc.fragment.ConverterFragment; 26 | import com.dreamfish.com.autocalc.fragment.MainFragment; 27 | import com.dreamfish.com.autocalc.utils.MyFragmentAdapter; 28 | import com.dreamfish.com.autocalc.utils.PermissionsUtils; 29 | import com.dreamfish.com.autocalc.utils.StatusBarUtils; 30 | import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; 31 | import com.kongzue.dialog.util.BaseDialog; 32 | import com.kongzue.dialog.util.DialogSettings; 33 | import com.kongzue.dialog.util.TextInfo; 34 | import com.kongzue.dialog.v3.MessageDialog; 35 | import com.umeng.analytics.MobclickAgent; 36 | import com.umeng.commonsdk.UMConfigure; 37 | 38 | import java.text.MessageFormat; 39 | import java.util.ArrayList; 40 | import java.util.List; 41 | 42 | import static com.dreamfish.com.autocalc.dialog.CommonDialogs.RESULT_SETTING_ACTIVITY; 43 | 44 | public class MainActivity extends AppCompatActivity { 45 | 46 | @Override 47 | protected void onCreate(Bundle savedInstanceState) { 48 | super.onCreate(savedInstanceState); 49 | setContentView(R.layout.activity_main); 50 | 51 | StatusBarUtils.setLightMode(this); 52 | 53 | initResources(); 54 | initControl(); 55 | initView(); 56 | initMainMenu(); 57 | 58 | //友盟统计 59 | UMConfigure.preInit(this, GDTAdManagerHolder.UMENG_KEY, getString(R.string.app_name)); 60 | MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); 61 | UMConfigure.init(getApplication(), GDTAdManagerHolder.UMENG_KEY, getString(R.string.app_name), UMConfigure.DEVICE_TYPE_PHONE, null); 62 | GDTAdManagerHolder.checkAndRequestPermission(this); 63 | 64 | if (AdConfig.isConfig) { 65 | AdConfig.getConfig(this, new AdConfigInterface() { 66 | @Override 67 | public void isAdConfig(boolean isAd) { 68 | if (isAd) { 69 | if (AdConfig.isGDT(MainActivity.this)) { 70 | GDTAdManagerHolder.loadUnifiedInterstitialAD(MainActivity.this); 71 | } else { 72 | CSJAdManagerHolder.loadFullScreenVideoAd(MainActivity.this); 73 | } 74 | } 75 | } 76 | }); 77 | } else { 78 | if (AdConfig.isGDT(this)) { 79 | GDTAdManagerHolder.loadUnifiedInterstitialAD(this); 80 | } else { 81 | CSJAdManagerHolder.loadFullScreenVideoAd(this); 82 | } 83 | } 84 | } 85 | 86 | private ViewPager mViewPager; 87 | private MainFragment fragmentMain; 88 | private ConverterFragment fragmentConverter; 89 | 90 | private Button btn_main_choose; 91 | private Button btn_convert_choose; 92 | private Button btn_settings; 93 | 94 | private String currentCalculatorMode = ""; 95 | private String currentConverterMode = ""; 96 | private int currentTabPos = 0; 97 | 98 | private void initView() { 99 | mViewPager = findViewById(R.id.view_pager_main); 100 | 101 | List sTitle = new ArrayList<>(); 102 | sTitle.add(""); 103 | sTitle.add(""); 104 | 105 | fragmentMain = MainFragment.newInstance(); 106 | fragmentConverter = ConverterFragment.newInstance(); 107 | 108 | List fragments = new ArrayList<>(); 109 | fragments.add(fragmentMain); 110 | fragments.add(fragmentConverter); 111 | 112 | MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(), fragments, sTitle); 113 | mViewPager.setAdapter(adapter); 114 | mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 115 | @Override 116 | public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 117 | 118 | } 119 | 120 | @Override 121 | public void onPageSelected(int position) { 122 | currentTabPos = position; 123 | updateTabText(); 124 | updateMainMenuState(); 125 | } 126 | 127 | @Override 128 | public void onPageScrollStateChanged(int state) { 129 | 130 | } 131 | }); 132 | 133 | fragmentMain.setOnPadModeChangedListener((String m) -> { 134 | currentCalculatorMode = m; 135 | updateTabText(); 136 | }); 137 | fragmentConverter.setOnModeChangedListener((String m) -> { 138 | currentConverterMode = m; 139 | updateTabText(); 140 | }); 141 | 142 | } 143 | 144 | private void initControl() { 145 | btn_main_choose = findViewById(R.id.btn_main_choose); 146 | btn_convert_choose = findViewById(R.id.btn_convert_choose); 147 | btn_settings = findViewById(R.id.btn_settings); 148 | btn_main_choose.setOnClickListener((View v) -> { 149 | if (mViewPager.getCurrentItem() == 0) fragmentMain.chooseMode(); 150 | else mViewPager.setCurrentItem(0); 151 | }); 152 | btn_convert_choose.setOnClickListener((View v) -> { 153 | if (mViewPager.getCurrentItem() == 1) fragmentConverter.showChooseConvertDialog(); 154 | else mViewPager.setCurrentItem(1); 155 | }); 156 | btn_settings.setOnClickListener((v) -> mainMenu.show()); 157 | } 158 | 159 | private void updateTabText() { 160 | switch (currentTabPos) { 161 | case 0: 162 | btn_main_choose.setTextColor(tab_text_color_selected); 163 | btn_main_choose.setText(MessageFormat.format(text_calculator_mode, currentCalculatorMode)); 164 | btn_main_choose.setCompoundDrawables(null, null, ic_down_small_primary, null); 165 | btn_convert_choose.setCompoundDrawables(null, null, null, null); 166 | btn_convert_choose.setText(text_converter); 167 | btn_convert_choose.setTextColor(tab_text); 168 | break; 169 | case 1: 170 | btn_main_choose.setTextColor(tab_text); 171 | btn_main_choose.setText(text_calculator); 172 | btn_main_choose.setCompoundDrawables(null, null, null, null); 173 | btn_convert_choose.setCompoundDrawables(null, null, ic_down_small_primary, null); 174 | btn_convert_choose.setText(currentConverterMode); 175 | btn_convert_choose.setTextColor(tab_text_color_selected); 176 | break; 177 | } 178 | } 179 | 180 | private int tab_text; 181 | private int tab_text_color_selected; 182 | 183 | private String text_calculator_mode; 184 | private String text_calculator; 185 | private String text_converter; 186 | private Drawable ic_down_small_primary; 187 | 188 | private void initResources() { 189 | Resources resources = getResources(); 190 | tab_text = resources.getColor(R.color.tab_text, null); 191 | tab_text_color_selected = resources.getColor(R.color.tab_text_color_selected, null); 192 | text_calculator_mode = resources.getString(R.string.text_calculator_mode); 193 | text_calculator = resources.getString(R.string.text_calculator); 194 | text_converter = resources.getString(R.string.text_converter); 195 | ic_down_small_primary = resources.getDrawable(R.drawable.ic_down_small_primary, null); 196 | ic_down_small_primary.setBounds(1, 1, 30, 30); 197 | } 198 | 199 | private PopupMenu mainMenu; 200 | 201 | private void updateMainMenuState() { 202 | Menu menu = mainMenu.getMenu(); 203 | switch (currentTabPos) { 204 | case 0: 205 | menu.findItem(R.id.action_show_functions).setEnabled(true); 206 | menu.findItem(R.id.action_custom_input).setEnabled(true); 207 | menu.findItem(R.id.action_show_calc_step).setEnabled(true); 208 | menu.findItem(R.id.action_show_full).setEnabled(true); 209 | break; 210 | case 1: 211 | menu.findItem(R.id.action_show_functions).setEnabled(false); 212 | menu.findItem(R.id.action_custom_input).setEnabled(false); 213 | menu.findItem(R.id.action_show_calc_step).setEnabled(false); 214 | menu.findItem(R.id.action_show_full).setEnabled(false); 215 | break; 216 | } 217 | } 218 | 219 | private void initMainMenu() { 220 | mainMenu = new PopupMenu(MainActivity.this, btn_settings); 221 | mainMenu.getMenuInflater().inflate(R.menu.menu_main, mainMenu.getMenu()); 222 | mainMenu.setOnMenuItemClickListener(item -> { 223 | switch (item.getItemId()) { 224 | case R.id.action_exit: 225 | onBackPressedAd(); 226 | break; 227 | case R.id.action_help: 228 | CommonDialogs.showHelp(this); 229 | break; 230 | case R.id.action_settings: 231 | CommonDialogs.showSettings(this); 232 | break; 233 | case R.id.action_show_full: 234 | fragmentMain.showFullText(); 235 | break; 236 | case R.id.action_show_functions: 237 | fragmentMain.showAllFunctionsHelp(); 238 | break; 239 | case R.id.action_custom_input: 240 | fragmentMain.showCustomerView(); 241 | break; 242 | case R.id.action_show_calc_step: 243 | fragmentMain.showCalcStep(); 244 | break; 245 | case R.id.action_rewar: 246 | startActivity(new Intent(MainActivity.this, ClearAdActivity.class)); 247 | break; 248 | } 249 | return true; 250 | }); 251 | 252 | if (AdConfig.isConfig) { 253 | AdConfig.isAdOpenNoVip(this, new AdConfigInterface() { 254 | @Override 255 | public void isAdConfig(boolean isAd) { 256 | if (isAd) { 257 | mainMenu.getMenu().findItem(R.id.action_rewar).setVisible(true); 258 | mainMenu.getMenu().findItem(R.id.action_show_full).setVisible(true); 259 | } else { 260 | mainMenu.getMenu().findItem(R.id.action_rewar).setVisible(false); 261 | mainMenu.getMenu().findItem(R.id.action_show_full).setVisible(false); 262 | } 263 | } 264 | }); 265 | } else { 266 | mainMenu.getMenu().findItem(R.id.action_rewar).setVisible(true); 267 | mainMenu.getMenu().findItem(R.id.action_show_full).setVisible(true); 268 | } 269 | } 270 | 271 | @Override 272 | public void onBackPressed() { 273 | onBackPressedAd(); 274 | } 275 | 276 | @Override 277 | protected void onActivityResult(int requestCode, int resultCode, Intent data) { 278 | if (requestCode == RESULT_SETTING_ACTIVITY) { 279 | fragmentMain.updateSettings(); 280 | fragmentConverter.updateSettings(); 281 | } 282 | super.onActivityResult(requestCode, resultCode, data); 283 | } 284 | 285 | @Override 286 | protected void onDestroy() { 287 | super.onDestroy(); 288 | MobclickAgent.onKillProcess(this); 289 | } 290 | 291 | @Override 292 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 293 | super.onRequestPermissionsResult(requestCode, permissions, grantResults); 294 | PermissionsUtils.getInstance().onRequestPermissionsResult(this, requestCode, permissions, grantResults); 295 | } 296 | 297 | private FrameLayout express_container; 298 | private TextView mTvBackMsg; 299 | 300 | public void onBackPressedAd() { 301 | DialogSettings.init(); 302 | DialogSettings.style = DialogSettings.STYLE.STYLE_MIUI; 303 | DialogSettings.theme = DialogSettings.THEME.LIGHT; 304 | DialogSettings.tipTheme = DialogSettings.THEME.DARK; 305 | MessageDialog.show(this, "", "", "忍痛退出") 306 | .setCustomView(R.layout.layout_interaction, new MessageDialog.OnBindView() { 307 | @Override 308 | public void onBind(MessageDialog dialog, View v) { 309 | //绑定布局事件,可使用v.findViewById(...)来获取子组件 310 | express_container = v.findViewById(R.id.express_container); 311 | mTvBackMsg = v.findViewById(R.id.mTvMsg); 312 | if (AdConfig.isConfig) { 313 | AdConfig.getConfig(MainActivity.this, new AdConfigInterface() { 314 | @Override 315 | public void isAdConfig(boolean isAd) { 316 | if (isAd) 317 | if (AdConfig.isGDT(MainActivity.this)) 318 | GDTAdManagerHolder.loadNativeExpressAD(MainActivity.this, express_container, mTvBackMsg); 319 | else 320 | CSJAdManagerHolder.loadNativeExpressAd(MainActivity.this, express_container, mTvBackMsg); 321 | } 322 | }); 323 | } else { 324 | if (AdConfig.isGDT(MainActivity.this)) 325 | GDTAdManagerHolder.loadNativeExpressAD(MainActivity.this, express_container, mTvBackMsg); 326 | else 327 | CSJAdManagerHolder.loadNativeExpressAd(MainActivity.this, express_container, mTvBackMsg); 328 | } 329 | } 330 | }) 331 | .setTitle("是否真的要退出?!") 332 | .setMessage(" ") 333 | .setMessageTextInfo(new TextInfo().setFontSize(1)) 334 | .setCancelable(false) 335 | .setOkButton("确定退出", new OnDialogButtonClickListener() { 336 | @Override 337 | public boolean onClick(BaseDialog baseDialog, View v) { 338 | finish(); 339 | System.exit(0); 340 | return false; 341 | } 342 | }) 343 | .setCancelButton("取消") 344 | .setOnCancelButtonClickListener(new OnDialogButtonClickListener() { 345 | @Override 346 | public boolean onClick(BaseDialog baseDialog, View v) { 347 | return false; 348 | } 349 | }); 350 | } 351 | } 352 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Good Weather](http://aokj.top/picture/autocalc/logo.png)
2 |
3 | # 计算器-智能计算器-科学计算器 4 | 5 | 需要源代码的,请联系:[QQ769708798](https://qm.qq.com/cgi-bin/qm/qr?k=Xm01ZvrFL6zCm_VcSLUQK6S_nObG8uOd&jump_from=webapi) 6 | 7 | 8 | 软件成品下载地址: 9 | 10 | [下载链接地址](https://wwb.lanzouy.com/s/calc) 11 | 12 | [二维码下载] 13 | ![](http://aokj.top/picture/autocalc/qr.png) 14 | 15 | ## APP介绍与使用 16 | 集科学计算、计算器、房贷计算、汇率个税于一体的智能语音计算器,无广告内存小。 17 | 超级计算器是一款多功能,小巧轻便,不加广告的计算器工具应用,完美适配任何机型,涵盖了标准四则计算、科学计算、个税计算、房贷计算、汇率转换、车贷计算等功能,并且有历史纪录,大写转换,复制结果,语音播报功能,操作非常简单和智能!简约主题皮肤和科技主题皮肤随意切换! 18 | 19 | 功能介绍: 20 | 21 | 【标准计算器】 22 | 23 | 1)支持日常用到的加、减、乘、除等基本运算,比自带的计算器更好用,操作便捷 24 | 25 | 2)支持对运算公式和结果的复制和粘贴功能 26 | 27 | 3)支持查看历史记录功能,过程在复杂也不会记错,完整保存历史过程,并可对历史记录重新编辑 28 | 29 | 4)支持数字转大写功能,一键复制将计算结果转化成大写,方便沟通和财务报销,使用更加方便 30 | 31 | 5)支持语音报数,按键震动,财务、会记算账准确也不用担心输入错数字 32 | 33 | 6)输入框再编辑,任意拖动光标,随意修改公式结果,方便检查再看,不出错 34 | 35 | 【科学计算器】 36 | 37 | 1)支持公式运算、对数函数、幂函数、三角函数、反三角函数科学计算 38 | 39 | 2)支持阶乘、角度制和弧度运算、平方运算等等 40 | 41 | 3)同样支持历史记录,大写转换,语音报数,再编辑功能 42 | 43 | 【房贷计算器】 44 | 45 | 支持商业、公积金、组合贷,最新利率表,可等额本息,等额本金详细切换查看 46 | 47 | 【个税计算器】 48 | 49 | 支持输入月工资,及扣除五险一金查看税后收入及纳税金额,快捷简单好用,做到心里有数 50 | 51 | 【车贷计算器】 52 | 53 | 支持全款及贷款购买方式,裸车价格及其他必须花费金额查看,一目了然 54 | 55 | 【汇率转换器】 56 | 57 | 实时汇率、支持将近100个国家,首页展示人民币,美元,欧元,长按点击可切换,实时更新,投资出行最佳选择 58 | 59 | ![](http://aokj.top/picture/autocalc/1.jpg) 60 | ![](http://aokj.top/picture/autocalc/2.jpg) 61 | ![](http://aokj.top/picture/autocalc/3.jpg) 62 | ![](http://aokj.top/picture/autocalc/4.jpg) 63 | ![](http://aokj.top/picture/autocalc/5.jpg) 64 | --------------------------------------------------------------------------------